【C++新特性】 - 类内初始值

【C++新特性】 - 类内初始值,第1张

如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。


默认值到底是什么由变量类型和变量所在位置决定。


如果是内置类型(int, short等)的变量为被显示初始化,它的值由定义的位置决定。


定义与任何函数体之外的变量被初始化为0,定义在函数体内部的内置变量将不被初始化,其值时未定义的。


C++11新标准规定可以为数据成员提供一个类内初始值(in-class initializer)。


创建对象时,类内初始值将用于初始化数据成员,没有初始值的成员将被默认初始化。


1、类内初始值和赋值类似,或者放在花括号里(如数组),或者放在等号右边,不能使用圆括号。


2、如果在构造方法里面对赋予了类内初始值的变量再次赋值,类内初始值将被覆盖。


class Student {
public:
	Student() = default;
	Student(int _age):age(_age) {};
	string name;
	int age = 10;
	int _class {3};
	int grade;

	void printInfo() { cout << "age:" << age << ", grade:" << grade << ", class:" << _class << endl; }
};

int main() {
	Student student1;
	student1.printInfo();

	Student student2(12);
	student2.printInfo();
	return 0;
}

上述代码输出:

age:10, grade:37, class:3
age:12, grade:24, class:3

1)成员变量grade没有被初始化,其值时未定义的,可能为任何值

2)student1对象的age和_class对象均由类内初始值初始化

3)student2对象的age变量的类内初始值被构造方法传递的参数值覆盖

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/579035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存