C++类内静态成员的初始化
来源:互联网 发布:制作歌曲伴奏软件 编辑:程序博客网 时间:2024/06/06 05:57
在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样
class A{ private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加static关键字
为什么?
因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。
什么东西能在类内初始化
能在类中初始化的成员只有一种,那就是静态常量成员。
这样不行
class A{ private: static int count = 0; // 静态成员不能在类内初始化 };
这样也不行
class A{ private: const int count = 0; // 常量成员也不能在类内初始化 };
但是这样可以
class A{ private: static const int count = 0; // 静态常量成员可以在类内初始化 };
结论:
- 静态常量数据成员可以在类内初始化(即类内声明的同时初始化),也可以在类外,即类的实现文件中初始化,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化;
- 静态非常量数据成员只能在类外,即类的实现文件中初始化,也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化;
- 非静态的常量数据成员不能在类内初始化,也不能在构造函数中初始化,而只能且必须在构造函数的初始化列表中初始化;
- 非静态的非常量数据成员不能在类内初始化,可以在构造函数中初始化,也可以在构造函数的初始化列表中初始化;
总结如下表:
类型 初始化方式
类内(声明)
类外(类实现文件)
构造函数中
构造函数的初始化列表
非静态非常量数据成员
N
N
Y
Y
非静态常量数据成员
N
N
N
Y (must)
静态非常量数据成员
N
Y (must)
N
N
静态常量数据成员
Y
Y
N
N
以下三种类型必须通过初始化列表来初始化
1.非静态 常量
2. 引用类型
3. 没有默认构造函数的类类型
阅读全文
0 0
- C++ 静态成员的类内初始化
- C++类内静态成员的初始化
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
- 模板内静态成员的初始化
- C++静态成员类内初始化注意事项
- 类的静态成员初始化
- 类的静态成员初始化。
- 静态成员的初始化顺序(C#,java)
- C++静态整型成员数据在类内初始化
- C++ 静态成员的类内初始化-of non-integral type 问题
- 静态初始化类成员
- C++类中静态成员的初始化
- 有关类的静态成员初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- C++类中静态成员的初始化
- java基础(集合)(初学者)
- MySQL因为外键关联无法删除数据解决方法以及修改数据库全部表中某种外键的值
- C语言实验——求阶乘(循环结构)
- java中两个变量之间交换方法总结
- 法国艺术家在城堡上创作的多彩棱镜壁画
- C++类内静态成员的初始化
- c++面向对象编程——类的初步学习
- 单页面应用接入微信填坑之二(微信支付Nodejs)
- Drools7.5.0教程-目录
- 通过javascript获取本周或上(n)周下(n)周的日期
- bLue的平行四边形
- Shiro——多个Realm的配置
- [Codeforces 891C] Envy
- Help Jimmy POJ