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

时间:2011-05-31 14:31:41

标签: 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;
};

感谢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;

2 个答案:

答案 0 :(得分:7)

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

5.19 / 3

  

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

在这种情况下需要

9.2 / 4

  

member-declarator 只有在声明了static成员或枚举类型的成员时才能包含常量初始化器

答案 1 :(得分:0)

为什么不说:

static const int x =0x8;