Ostrzeżenie kompilatora (błąd) C4597
niezdefiniowane zachowanie:
offsetof
stosowane do elementu członkowskiego bazy wirtualnej
Użycie offsetof(T, m)
metody where m
odwołuje się do elementu członkowskiego danych statycznych lub funkcji składowej powoduje wystąpienie C4597.
Uwagi
To ostrzeżenie jest nowe w programie Visual Studio 2017 w wersji 15.3. Jest on domyślnie zgłaszany jako błąd. Aby uzyskać informacje na temat wyłączania ostrzeżeń według wersji kompilatora, zobacz Ostrzeżenia kompilatora według wersji kompilatora.
Przykład
Następujący kod generuje błąd 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'
Ten kod jest źle sformułowany i może potencjalnie spowodować awarię w czasie wykonywania. Aby rozwiązać ten problem, zmień kod: nie wywołujej funkcji offsetof
składowych ani statycznych składowych danych. Jest to nieodnośny kod, który jest niedozwolony w standardzie C++.