C++11类成员的初始化总结

以前看到的C++98的文章:

C++为类中提供类成员的初始化列表。

类对象的构造顺序是这样的:
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  

这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员或者使用枚举。


但是在C++11中,我们可以利用类内初始化:

int j = 15;
class Bclass
{
private:
	int f = 100;
	float g = 200.0;
	const float h = 30.0;
	const int a=10;
	//  const int array[20];
	//  int thesecondarray[20] = { 0 };
	int &b=j;
	int &k = f;
	static int c;
	static const int d=30;
	static const float e;
public:
	Bclass()
	{
		//  array[20] = { 0 };       注释去掉有错误
		//thesecondarray[20] = { 0 };
	}
	void print()
	{
		cout << a << " "
			<< b << "  "
			<< c << "  "
			<< d << "  "
			<< e << "  "
			<< f << "  "
			<< g << "  "
			<< h << "  "
			<< k << endl;
		//for (int i = 0; i < 20; ++i)
			//cout << array[i] << "  ";
		//for (int i = 0; i < 20; ++i)
			//cout << thesecondarray[i] << "   ";
	}
};
int Bclass::c = 20;
const float Bclass::e = 40.0;
 
可以看到基本类型不用多说,可以在类内初始化。在这里我们重点看const 与static,引用,以及数组。

const  的int 与float都能在类内初始化。但是static还是只有static const int 能在类内初始化,其他的static 还是能在类外初始化。

而引用则可以在类内初始化。而无论是const 数组还是非const 数组,都不能在类内显示初始化。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值