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)等非整型常量表达式,用来初始化类定义中的整型常量静态成员是非法的。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值