Sdílet prostřednictvím


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