C++ 常量数据成员、静态数据成员、常量静态数据成员的初始化

如果你想初始化一个类中的常量数据成员,只能用一种方法,在构造函数后的初始化列表中初始化;

类中的静态成员只有常量整数(不局限于int,如:short等)可以申明和定义一并出现,否则只能申明。

 

实例见:http://blog.csdn.net/liuxialong/article/details/6573025

 

C++标准 9.4.2.4 是这么说的:

If a static data member is of const integral or const enumeration type, its decalaration in the class can specify a constant-initializer which shall be an integral constant expression.

可以看到,对类中的数据成员进行初始化的条件是:
1. 必须是一个(static)静态成员。对于非静态成员不能在类定义中进行初始化。
2. 静态成员的声明中必须是有 const 限定。非 const 的静态成员不能在类定义中进行初始化。
3. 静态成员的类型必须为整型或者是枚举型。其它类型(如浮点型、数组、指针等)不能在类定义中进行初始化。
4. 只能使用一个整型常量表达式(integral constant expression)来进行初始化。

一个编译器应该对于违反上述任何一条的程序进行报错(error)或者最低限度是警告(warning)处理,否则就是编译器的失职。

标准中还对特别指出了什么不能作为整型常量表达式(integral constant-expression):

In particular, except in sizeof expressions, functions, class objects, pointers, or references shall not be used.

因此,函数(function)等非整型常量表达式,用来初始化类定义中的整型常量静态成员是非法的。

如果编译器对此不报错,说明编译器对标准的支持还有待提高。

你可能感兴趣的:(C++ 常量数据成员、静态数据成员、常量静态数据成员的初始化)