Visual Studio sizeof非法操作数

Juk*_*rpa 3 c++ windows sizeof visual-studio visual-c++

我目前正在将一个在Linux上开发的程序移植到Win32.在其他问题中,我有一个非常奇怪的问题.头文件包含以下内容:

namespace Networking {
  struct  MetaStruct
  {
    int   iDataType;
    int   iDataSize;
    void* pData;
  };

  const int MetaStructSize = sizeof(MetaStruct) - sizeof(MetaStruct::pData);
};
Run Code Online (Sandbox Code Playgroud)

这在Linux上编译很好,但是在使用VS2010编译Win32时遇到了这个错误: Networking.hpp(50): error C2070: '': illegal sizeof operand

我尝试添加Networking::之前MetaStruct但它没有改变任何东西.奇怪的是VS2010给了我正确的值,sizeof当我用鼠标悬停它,但不会编译它.为什么?

CB *_*ley 9

在C++ 03中有两种形式的sizeof表达式(参见ISO/IEC 14882:2003 5.3.3 [expr.sizeof]).

sizeof unary-expression
sizeof ( type-id )
Run Code Online (Sandbox Code Playgroud)

MetaStruct::pData 既不是有效的表达式(解析为对象类型)也不是类型的名称.

你必须这样做

sizeof( void* )
Run Code Online (Sandbox Code Playgroud)

要么

sizeof MetaStruct().pData
Run Code Online (Sandbox Code Playgroud)

更新:感谢@hvd,他们指出这在C++ 11中实际上应该是合法的.

您现在可以使用一个id-expression,该id-expression在未评估它的上下文中引用类的非静态成员.显然,VS2010不支持此功能.

sizeof在C++ 11中还有一种新形式:sizeof ... ( identifier )但这与此无关.