一、各种初始化的形式

/* 定义变量形式一:不指定初始值 */
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};
  • 列表初始化之所以可行,是因为我们在相应的类的构造函数中定义了该种方法。