9.13. 变量及数组初始化
总述
用 =
, ()
和 {}
均可.
说明
您可以用 =
, ()
和 {}
, 以下的例子都是正确的:
- int x = 3;
- int x(3);
- int x{3};
- string name("Some Name");
- string name = "Some Name";
- string name{"Some Name"};
请务必小心列表初始化 {…}
用 std::initializer_list
构造函数初始化出的类型. 非空列表初始化就会优先调用 std::initializer_list
, 不过空列表初始化除外, 后者原则上会调用默认构造函数. 为了强制禁用 std::initializer_list
构造函数, 请改用括号.
- vector<int> v(100, 1); // 内容为 100 个 1 的向量.
- vector<int> v{100, 1}; // 内容为 100 和 1 的向量.
此外, 列表初始化不允许整型类型的四舍五入, 这可以用来避免一些类型上的编程失误.
- int pi(3.14); // 好 - pi == 3.
- int pi{3.14}; // 编译错误: 缩窄转换.