Compilerwarnung (Fehler) C4597

undefiniertes Verhalten: offsetof Auf ein Mitglied einer virtuellen Basis angewendet

Die Verwendung, offsetof(T, m) bei der m sich auf ein statisches Datenelement oder eine Memberfunktion bezieht, führt zu C4597.

Hinweise

Diese Warnung ist neu in Visual Studio 2017, Version 15.3. Es wird standardmäßig als Fehler gemeldet. Informationen zum Deaktivieren von Warnungen nach Compilerversion finden Sie unter Compilerwarnungen nach Compilerversion.

Beispiel

Der folgende Code führt zu Fehler 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'

Dieser Code ist falsch formatiert und kann möglicherweise zur Laufzeit einen Absturz verursachen. Um den Fehler zu beheben, ändern Sie den Code: Rufen Sie nicht für Memberfunktionen oder statische Datenmember auf offsetof . Dies ist nicht portierbarer Code, der vom C++-Standard nicht zugelassen ist.