Peringatan Pengompilasi (kesalahan) C4597
perilaku yang tidak ditentukan:
offsetof
diterapkan ke anggota basis virtual
Menggunakan offsetof(T, m)
di mana m
mengacu pada anggota data statis atau fungsi anggota menghasilkan C4597.
Keterangan
Peringatan ini baru di Visual Studio 2017 versi 15.3. Ini dilaporkan sebagai kesalahan secara default. Untuk informasi tentang cara menonaktifkan peringatan berdasarkan versi kompilator, lihat Peringatan pengkompilasi menurut versi kompilator.
Contoh
Kode berikut menghasilkan kesalahan C4597:
#include <cstddef>
struct A {
int ten() { return 10; }
static constexpr int two = 2;
};
constexpr auto off = offsetof(A, ten); // C4597: undefined behavior: offsetof applied to member function 'A::ten'
constexpr auto off2 = offsetof(A, two); // C4597: undefined behavior: offsetof applied to static data member 'A::two'
Kode ini tidak terbentuk dan berpotensi menyebabkan crash pada runtime. Untuk memperbaiki kesalahan, ubah kode: jangan panggil offsetof
pada fungsi anggota atau anggota data statis. Ini adalah kode nonportabel yang tidak diizinkan oleh standar C++.