花括号或等号初始化器(initializers)

变量的初始化会在构造时提供变量的初始值。

初始值可以由声明符或 new 表达式的初始化器部分提供。在函数调用时也会发生:函数形参及函数返回值也会被初始化。

对于每个声明符,初始化器必须是下列之一:

  • ( 表达式列表 ) // 括号中的以逗号分隔的含有任意表达式和花括号初始化器列表的列表
  • = 表达式 // 等号后面跟着一个表达式
  • { 初始化器列表 } // 花括号初始化器列表:以逗号分隔且可以为空的含有表达式和其他花括号初始化器列表的列表

根据上下文,初始化器可以调用:

1
2
3
4
5
6
std::string s{}; // 值初始化
std::string s("hello"); // 直接初始化
std::string s = "hello"; // 复制初始化
std::string s{'a', 'b', 'c'}; // 列表初始化
char a[3] = {'a', 'b'}; // 聚合初始化
char& c = a[0]; // 引用初始化

如果不提供初始化器,那么就会应用默认初始化的规则。