C++类中的数据成员能否在定义类的时候就初始化?
来源:互联网 发布:python 英文词性标注 编辑:程序博客网 时间:2024/06/05 23:43
class A{
private:
int a=1;
};
即上述关于类的定义正确与否?
一般而言,类中的数据成员在定义类的时候是不能初始化的。
这是一个可以值得探讨的话题,每个人的解释都不一样,大部分人都认为这是编译语法的规定,那么有没有考虑为什么会有这个规定呢?
个人认为可能的原因有:
(1)类只是一个抽象类型,并不是实体的东西,利用这个抽象类型会实例化成不同的个体,每个个体的特征(数据成员)都不一样,如果在类定义中将特征初始化了,岂不是破坏了抽象性,做了一个面向都一样的模子?
(2)类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。
所以:
1、一般的数据成员可以在构造函数中初始化。(构造初始化列表初始化和构造函数体内赋值初始化)
2、const数据成员必须在构造函数的初始化列表中初始化(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时就会出现问题)。
3、static要在类的定义外面初始化。
4、数组成员是不能在初始化列表里初始化的,不能给数组指定明显的初始化。
——————————————————————————————————————————————————
然而在C++11标准允许在类定义时初始化数据成员,在新标准下,文章开头的代码与下面的代码是等价的:
class A{
{
a=1;
}
private:
int a;
};
这样来定义默认构造函数似乎更为方便简洁。
private:
int a=1;
};
即上述关于类的定义正确与否?
一般而言,类中的数据成员在定义类的时候是不能初始化的。
这是一个可以值得探讨的话题,每个人的解释都不一样,大部分人都认为这是编译语法的规定,那么有没有考虑为什么会有这个规定呢?
个人认为可能的原因有:
(1)类只是一个抽象类型,并不是实体的东西,利用这个抽象类型会实例化成不同的个体,每个个体的特征(数据成员)都不一样,如果在类定义中将特征初始化了,岂不是破坏了抽象性,做了一个面向都一样的模子?
(2)类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。
所以:
1、一般的数据成员可以在构造函数中初始化。(构造初始化列表初始化和构造函数体内赋值初始化)
2、const数据成员必须在构造函数的初始化列表中初始化(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时就会出现问题)。
3、static要在类的定义外面初始化。
4、数组成员是不能在初始化列表里初始化的,不能给数组指定明显的初始化。
——————————————————————————————————————————————————
然而在C++11标准允许在类定义时初始化数据成员,在新标准下,文章开头的代码与下面的代码是等价的:
class A{
public:
A(){
a=1;
}
private:
int a;
};
这样来定义默认构造函数似乎更为方便简洁。
阅读全文
0 0
- C++类中的数据成员能否在定义类的时候就初始化?
- C++类中的数据成员能否在定义类的时候就初始化?
- 在c++类定义时初始化数据成员的方法
- 只有静态的常量整形数据成员才可以在类定义中初始化
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
- 类的静态数据成员声明、定义、初始化
- 类静态数据成员的定义及初始化
- static成员变量在类的定义体中初始化
- C/C++——为什么类的静态成员函数在定义的时候不写static?
- static 数据成员必须在类定义的外部定义
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 在对象创建的时候就自动初始化成员变量-构造函数
- 类的数据成员初始化
- 类数据成员的初始化
- C++类中的静态数据成员的初始化
- 只有静态常量整型数据成员才能在类定义中初始化
- 关于C++ 类数据成员初始化的一点总结【为什么类定义中不能初始化成员变量】
- 几款常用的高质量web前端框架
- 使用exe4j将java程序打包成exe文件
- Jenkins进阶系列之——07更改Jenkins的主目录
- OpenCV环境下计算并绘制灰度直方图的源码!
- 你需要的iPhoneX适配
- C++类中的数据成员能否在定义类的时候就初始化?
- Solr集群的搭建以及使用
- nginx+ftp搭建图片服务器(Windows Server服务器环境下)
- JSONUtil工具类
- 树状数组模板
- JS判断客户端是否是iOS或者Android手机移动端
- 二叉查找树
- webService与HTTP的关系
- BZOJ1079 [SCOI2008]着色方案 记忆化搜索DP 妙啊