一、各种初始化的形式
/* 定义变量形式一:不指定初始值 */
int a; // 默认初始化
/* 定义变量形式二:指定初始值 */
int b = 1; // 拷贝初始化
int b(1); // 直接初始化
int b = {1}; // 列表初始化
int b{1}; // 列表初始化
二、默认初始化
- 定义变量时没有指定初值(此时变量被赋予了“默认值”)
内置类型:①全局变量被初始化为0,②局部变量不被初始化(值是未定义的)
类类型:①有默认构造函数则由默认构造函数初始化,②无默认构造函数同内置类型
三、拷贝初始化
- 使用等号=初始化一个变量(编译器把等号右侧的初始值拷贝到新创建的对象中去)
四、直接初始化
string s1("hello"); // 直接初始化
string s2(10, 'c'); // 直接初始化
- 直接初始化与我们类的构造函数息息相关。
五、列表初始化
int a = {10};
int a{10};
vector<int> ivec = {1, 3, 5, 7};
vector<int> ivec{1, 3, 5, 7};
- 列表初始化之所以可行,是因为我们在相应的类的构造函数中定义了该种方法。
来源:oschina
链接:https://my.oschina.net/u/4266408/blog/4035020