다음을 통해 공유


컴파일러 경고(오류) C4597

정의되지 않은 동작: offsetof 가상 베이스의 멤버에 적용

여기서 moffsetof(T, m) 정적 데이터 멤버 또는 멤버 함수를 참조하면 C4597이 발생합니다.

설명

이 경고는 Visual Studio 2017 버전 15.3의 새로운 기능입니다. 기본적으로 오류로 보고됩니다. 컴파일러 버전별 경고를 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 컴파일러 버전별 컴파일러 경고를 참조하세요.

예시

다음 코드는 오류 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'

이 코드는 형식이 잘못되었고 런타임에 크래시가 발생할 수 있습니다. 오류를 해결하려면 멤버 함수 또는 정적 데이터 멤버에 대해 호출 offsetof 하지 말고 코드를 변경합니다. C++ 표준에서 허용되지 않는, 포팅할 수 없는 코드입니다.