C++中括号初始化
时间: 2023-06-22 16:17:39 浏览: 78
C++11标准引入了括号初始化(Braced Initialization)语法,可以在变量定义时使用花括号 `{}` 来进行初始化,可以是:
- 列表初始化(List Initialization):使用花括号内逗号分隔的值列表进行初始化
- 值初始化(Value Initialization):使用花括号内不带值的形式进行初始化
例如:
```c++
// 列表初始化
int arr[] = {1, 2, 3}; // 定义一个 int 数组并初始化为 {1, 2, 3}
std::vector<int> vec{4, 5, 6}; // 定义一个 int 向量并初始化为 {4, 5, 6}
// 值初始化
int i{}; // 定义一个 int 变量并初始化为 0
double d{}; // 定义一个 double 变量并初始化为 0.0
```
使用括号初始化的好处是可以避免一些类型转换问题,例如:
```c++
double d = 1/2; // 结果为 0,因为 1/2 的结果是整型 0,然后赋值给 double 类型的变量
double dd{1/2}; // 结果为 0.0,因为使用括号初始化时,1/2 被解释为两个 double 类型的值,然后赋值给 double 类型的变量
```
需要注意的是,括号初始化语法在某些情况下可能会出现一些意外的行为,例如:
```c++
int i(3.14); // i 的值为 3,因为使用括号初始化时,3.14 被截断为整型 3,然后赋值给 int 类型的变量
```
因此,建议在实际使用中仔细考虑是否使用括号初始化,并注意其可能的行为差异。