struct Example
{
static const int One = 1000; // Legal
static const short Two = 2000; // Illegal
static const float Three = 2000.0f; // Illegal
static const double Four = 3000.0; // Illegal
static const string Five = "Hello"; // Illegal
};
#2、#3、#4 和 #5 是否有任何非法的原因?
我想我知道#5 的原因:编译器需要一个“真正的”字符串对象(因为它不是内置类型)并且不能盲目地Five
替换"Hello"
为#define Five "Hello"
. 但如果是这种情况,编译器不能在 .obj 文件中留下提示并告诉链接器自动创建string Five
某处的一个实例吗?
对于#3 和#4,尤其是#2(哈哈!)...我真的看不出任何可能的原因!浮点数和双精度数是内置类型,就像 int 一样!而 short 只是一个(可能)更短的整数。
编辑:我正在使用 Visual Studio 2008 来编译它。我认为在这种情况下所有编译器的行为都相同,但显然 g++ 编译得很好(#5除外)。VS 为该片段提供的错误是:
错误 C2864:“Example::Two”:只能在类中初始化静态 const 整数数据成员 错误 C2864:'Example::Three':只能在类中初始化静态 const 整数数据成员 错误 C2864:'Example::Four':只能在类中初始化静态 const 整数数据成员 错误 C2864:'Example::Five':只能在类中初始化静态 const 整数数据成员