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

本文讨论了C++中变量的默认初始化,特别是内置类型变量在不同位置的初始化情况。类内初始值是C++11引入的新特性,允许在类定义中直接为数据成员提供初始值。如果在构造函数中对已有类内初始值的变量重新赋值,类内初始值会被覆盖。示例代码展示了类内初始值如何工作,并通过一个Student类的实例说明了变量初始化的效果。
摘要由CSDN通过智能技术生成

如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。默认值到底是什么由变量类型和变量所在位置决定。

如果是内置类型(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变量的类内初始值被构造方法传递的参数值覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值