Partilhar via


Aviso do compilador (erro) C4597

comportamento indefinido: offsetof aplicado a um membro de uma base virtual

Usar offsetof(T, m), em que m se refere a um membro de dados estático, ou uma função de membro, resultará em um erro C4597.

Comentários

Este aviso é novo no Visual Studio 2017 versão 15.3. Ele é relatado como um erro por padrão. Para obter informações sobre como desabilitar avisos por versão do compilador, consulte Avisos do compilador por versão do compilador.

Exemplo

O seguinte código produz o erro 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'

Esse código está malformado e pode causar falhas em runtime. Para corrigir o erro, altere o código: não invoque offsetof em funções membro ou membros de dados estáticos. Esse é o código não portátil que não é permitido pelo padrão C++.