Upozornění kompilátoru (chyba) C4597
nedefinované chování:
offsetof
použito na člena virtuální báze
Výsledkem použití offsetof(T, m)
odkazu m
na statický datový člen nebo členovou funkci je C4597.
Poznámky
Toto upozornění je nové v sadě Visual Studio 2017 verze 15.3. Ve výchozím nastavení se zobrazí jako chyba. Informace o tom, jak zakázat upozornění podle verze kompilátoru, naleznete v tématu Upozornění kompilátoru podle verze kompilátoru.
Příklad
Následující kód způsobí chybu 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'
Tento kód je špatně vytvořený a může potenciálně způsobit chybové ukončení za běhu. Pokud chcete chybu opravit, změňte kód: nevyvolávejte offsetof
členské funkce nebo statické datové členy. Jedná se o nepřenosných kód, který není zakázán standardem C++.