C++ static const 修饰成员

来源:互联网 发布:常用算法面试 编辑:程序博客网 时间:2024/06/05 14:40

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。

<pre name="code" class="cpp">class Test{public:Test() : a(0) {}enum { size1 = 100, size2 = 200 };private:const int a;  // 只能在构造函数初始化列表中初始化,这个似乎很少用到???static int b; // 不能赋值,初始化!!!!const static int c; // 与static const int c;相同;可以在这里声明并定义赋值 c=0 (以便在此类的声明里被用到,如定义数组时需要长度int常量,但不是所有编译器都支持在这里初始化,有些支持,这些支持的[可能]要求你在实现文件中定义一次如“const int Test::c;”(设初值了); 如果不支持,在定义数长度时,可以用enum来代替常量int).};int Test::b = 0;  //不能以成员列表初始化,不能在声明处初始化,因为不属于某个对象。const int Test::c = 0;//注意:给静态成员变量赋值时,不能加static修饰。但const要加。

总结:

1. 只有const 则一定只能在初始化列表或者构造函数中初始化

2.只有static 则只能在函数体声明之外初始化

3.const与static同在,那变量在【类声明处(即头文件)---要编译器支持,如vs支持在此初始化】和 【函数体外(或实现文件)但是不能加static修饰)都可以初始化,但是不能在初始化列表初始化

0 0
原创粉丝点击