当前位置:   article > 正文

C++变量初始化形式及其默认初始值_c++类型定义的时候直接默认值

c++类型定义的时候直接默认值

什么是初始化

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

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

初始化方式

默认初始化

在下面情况发生:

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

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

值初始化

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

int main()
{
   
	int *p = new int();//值初始化
	vector<int> vec(10);//值初始化
	//int a();错误的初始化方式
	int a = int();//值初始化
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

  • 对于内置类型初始值为0
  • 对于类类型则调用其默认构造函数,如果没有默认构造函数,则不能进行值初始化。
class A {
   
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/106365
推荐阅读
相关标签
  

闽ICP备14008679号