C++变量初始化形式及其默认初始值

本文介绍了C++中变量的初始化形式,包括默认初始化、值初始化、直接初始化/拷贝初始化和列表初始化,讨论了它们的适用场景和默认初始值。对于内置类型,未初始化的变量默认值依赖于其类型;而对于类类型,初始化方式会影响构造函数的调用。C++11引入的列表初始化增强了初始化的灵活性。
摘要由CSDN通过智能技术生成

什么是初始化

当对象在创建时获得了一个特定的值,我们就说这个对象被初始化了。

注意:在C++语言中,初始化和赋值是两个完全不同的操作。
初始化创建变量时赋予其一个初始值。
赋值:把对象的当前值删除,并赋予一个新的值。
而在很多类中,初始化和赋值的区别事关底层效率问题:前者直接初始化数据成员,后者则先初始化再赋值。

初始化方式

默认初始化

在下面情况发生:

  • 在块作用域中定义非静态变量或者数组时没有赋初值
{
   
	int var;
	int arr[10];
}
  • 当一个类本身含有类类型的成员且使用合成的默认构造函数时
class B {
   
	int a = 1;
	int b = 2;
};
class A {
   
	B m_b;
};
  • 当类类型的成员没有在构造函数初始化列表中显示地初始化时

简单来说,如果在变量初始化时没有指定初始值,则变量进行默认初始化,此时变量被赋予了默认值,默认值到底是什么由变量类型变量的位置决定的,我们后面会具体讲解

值初始化

值初始化是只使用了初始化器(即使用了圆括号或花括号)但却没有提供初始值的情况

int main()
{
   
	int *p = new int();//值初始化
	vector<int> vec(10);//值初始化
	//int a();错误的初始化方式
	int a = int();//值初始化
	return 0;
}

注意:当不采用动态分配内存的方式(即不采用new运算符)时,写成int a();是错误的值初始化方式,因为这种方式声明了一个函数而不是进行值初始化。如果一定要进行值初始化,必须结合拷贝初始化使用,即写成int a=int();

  • 对于内置类型初始值为0
  • 对于类类型则调用其默认构造函数,如果没有默认构造函数,则不能进行值初始化。
class A {
   //由于显示声明了构造函数,所以没有默认构造函数
public:
	A(int x) {
   
		a = x;<
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倒地不起的土豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值