Condividi tramite


Avviso del compilatore (errore) C4597

comportamento non definito: offsetof applicato a un membro di una base virtuale

L'uso di offsetof(T, m) dove m fa riferimento a un membro dati statico o a una funzione membro restituisce C4597.

Osservazioni:

Questo avviso è una novità di Visual Studio 2017 versione 15.3. Viene segnalato come errore per impostazione predefinita. Per informazioni su come disabilitare gli avvisi in base alla versione del compilatore, vedere Avvisi del compilatore per versione del compilatore.

Esempio

Il codice seguente genera l'errore 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'

Questo codice non è valido e può causare un arresto anomalo in fase di runtime. Per correggere l'errore, modificare il codice: non richiamare offsetof su funzioni membro o membri dati statici. Si tratta di codice non portabile non consentito dallo standard C++.