【C++】类内成员变量的初始化

1.成员类型

对于一个类,一般有四种成员类型

class MyClass
{
public:
	MyClass();
	~MyClass();

private:
	int a ; 变量(非静态变量)
	const int b; 常量(非静态常量) error
	static int c; 静态变量
	static const int d; 静态常量
};

注:对于非静态常量b,是需要进行初始化 的。

2.初始化

C++98中

常量和变量,需要在构造函数中初始化,静态常量才可以在类内初始化,这里了解一下就行,毕竟一般都是C++11;

在C++11当中,对C++98进行了改进

常量、变量、静态常量---可以在类内初始化

静态变量 ---不可以在类内初始化。如下

	int a =1;
	const int b=2;
	static int c=3;错误
	static const int d=4;
//错误    C2864    MyClass::c: 带有类内初始化表达式的静态 数据成员 必须具有不可变的常量整型类型,

注:报错的意思就是,要在类内对静态成员进行初始化,必须是静态常量(d)才可以,而静态变量(c)不可以.

因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的

静态常量成员是可以在类内声明的

3.初始化方式

在C++11当中,允许在定义类的时候,在类内直接对非静态成员,静态成员常量利用 “=()”和“{ }”进行初始化。如以下

class MyClass
{
public:
	MyClass();
	~MyClass();

private:
	int a1 = 1;		//方式一
	int a2 = {2};	//方式二
	int a3{3};		//方式三
	const int b1 = 1;
	const int b2 = {2};
	const int b3{3};
	static int c;	//类外初始化
	static const int d1 = 1;
	static const int d2 = {2};
	static const int d3{3};
};

4.初始化列表

可以在构造函数时,对非静态成员使用初始化列表进行初始化,如对a,b的初始化

class MyClass
{
public:
	MyClass(int v1,int v2):a(v1),b(v2) {};//初始化列表
	~MyClass() {};

private:
	int a;		
	const int b;
	static int c;	//类外初始化
	static const int d ;

};

5.总结

C++11中,

1.非静态常量,非静态变量、静态常量---可以在类内初始化。用=()或{}都可以。静态变量 ---必须类外初始化。

2.非静态常量(const int)必须初始化。类内或者初始化列表 初始化

3.非静态变量(int) 可以不初始化,也可以在类内或者初始化列表 初始化

4.静态常量(static const int )必须类外初始化.

5.静态变量static int )可以不初始化,也可以类内初始化,不可以用初始化列表

猜你喜欢

转载自blog.csdn.net/m0_57168310/article/details/126746229