Bagikan melalui


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++.