在C++11及以后的版本中,花括号{}
语法在不同语境下有不同的用法,下面总结使用{}
的常见场景:
1 列表初始化
List Initialization
{}
可以使用列表初始化的方式初始化对象,包括内置类型,数组,容器等。如:
int x = {5}; // x被初始化为5
std::vector<int> v = {1, 2, 3}; // 用三个元素初始化一个数组
int arr[] = {1, 2, 3}; // 用三个元素初始化一个数组
列表初始化确保初始化是充分定义的。
2 值初始化
Value Initialization
在某些情况下,{}
会用零或者默认值来初始化一个对象,如:
int x{}; // x被初始化为0
double d{}; // x被初始化为0
对于没有初始化构造函数的对象,可以使用值初始化的方式。
3 空初始化
Empty Initialization
在某些情况下,{}
会将对象初始化为空,如:
std::string s{}; // 初始化一个空字符串
std::vector<int> v{}; // 初始化一个空容器
char arr[10]{}; //初始化一个空数组
4 指针的空初始化
Empty Initialization of Pointers
{}
可以将指针初始化为nullptr
,表示其暂时不指向任何对象。
int* ptr{}; // 将指针初始化为nullptr
std::shared_ptr<int> sp{}; // 将共享指针初始化为nullptr