Compartir a través de


Advertencia del compilador (error) C4597

comportamiento no definido: se aplicó offsetof a un miembro de una base virtual

Usar offsetof(T, m) en que m hace referencia a un miembro de datos estático o una función miembro genera la advertencia C4597.

Comentarios

Esta advertencia es nueva en Visual Studio 2017, versión 15.3. Se notifica como un error de manera predeterminada. Para información sobre cómo deshabilitar las advertencias por versión del compilador, consulte Advertencias del compilador por versión del compilador.

Ejemplo

El código siguiente produce el error 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'

Este código no tiene un formato correcto y podría ocasionar un bloqueo en tiempo de ejecución. Para corregir el error, cambie el código: no invoque a offsetof en funciones miembro o miembros de datos estáticos. Se trata de código no portable que no admite el estándar de C++.