在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;
答案 0 :(得分:7)
您对A *和B *的强制转换会阻止x的初始化为常量表达式:
5.19 / 3
在这种情况下需要算术常量表达式中的转换运算符只能将算术或枚举类型转换为算术类型或枚举类型,不包括
sizeof
运算符的操作数的一部分。
:
9.2 / 4
member-declarator 只有在声明了
static
成员或枚举类型的成员时才能包含常量初始化器。
答案 1 :(得分:0)
为什么不说:
static const int x =0x8;