C++ static const 修饰成员
2015-09-20 15:08
363 查看
const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const
数据成员的值是什么。
总结:
1. 只有const 则一定只能在初始化列表或者构造函数中初始化
2.只有static 则只能在函数体声明之外初始化
3.const与static同在,那变量在【类声明处(即头文件)---要编译器支持,如vs支持在此初始化】和 【函数体外(或实现文件)(但是不能加static修饰)】都可以初始化,但是不能在初始化列表初始化
数据成员的值是什么。
<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修饰)】都可以初始化,但是不能在初始化列表初始化
相关文章推荐
- C++字符串知识总结
- C++ <ADT:单链表追加、选择排序、删除>
- C++构造函数初始化列表与赋值
- android error while loading shared libraries: libstdc++.so.6
- Effective C++ —— 定制new和delete(八)
- c++学习(2)
- 使程序暂停的3种方法
- Effective C++ —— 别让异常逃离析构函数
- 漫谈c++11 Thread库之使写多线程程序
- c++中的时间戳
- c中const和c++中const的学习总结
- c++中的各种容器
- C++字符串string类常用操作详解(一)【初始化、遍历、连接】
- c++反汇编学习笔记-------------篇外1、if和switch效率的实测
- C语言指针数组与数组指针
- C++ trivial和non-trivial构造函数及POD类型
- Effective C++——条款47(第7章)
- C# C++
- c++反汇编学习笔记----------3.流程控制
- C++动态分配内存(new)和撤销内存(delete)