static_cast dynamic_cast:期望的常量表达式?

0 c++ visual-c++

在Visual C++ 2010中,在编译以下代码时,我收到错误消息:

static_cast error C2057:预期的常量表达式.

那有什么不对?

struct A {};
struct B : A {};

struct XX
{
    static const int offset = (long)static_cast<A*>((B*)0x8) - 0x8;
};
Run Code Online (Sandbox Code Playgroud)

感谢AProgrammer,以下内容对于VC 2010是正确的:

struct A {};
struct B : A {};

struct XX
{
    static const int offset;
};

const int XX::offset
 = (long)static_cast<A const*>((B const*)0x8) - 0x8;
Run Code Online (Sandbox Code Playgroud)

APr*_*mer 7

您对A*和B*的强制转换会阻止x的初始化为常量表达式:

5.19/3

算术常量表达式中的转换运算符只能将算术或枚举类型转换为算术类型或枚举类型,但不包括作为sizeof运算符操作数的一部分.

在这种情况下需要:

9.2/4

构件声明符可以包含一个恒定的初始化仅当它声明一个static整数或枚举类型的构件.