9.13. 变量及数组初始化

总述

=, (){} 均可.

说明

您可以用 =, (){}, 以下的例子都是正确的:

  1. int x = 3;
  2. int x(3);
  3. int x{3};
  4. string name("Some Name");
  5. string name = "Some Name";
  6. string name{"Some Name"};

请务必小心列表初始化 {…}std::initializer_list 构造函数初始化出的类型. 非空列表初始化就会优先调用 std::initializer_list, 不过空列表初始化除外, 后者原则上会调用默认构造函数. 为了强制禁用 std::initializer_list 构造函数, 请改用括号.

  1. vector<int> v(100, 1); // 内容为 100 个 1 的向量.
  2. vector<int> v{100, 1}; // 内容为 100 和 1 的向量.

此外, 列表初始化不允许整型类型的四舍五入, 这可以用来避免一些类型上的编程失误.

  1. int pi(3.14); // 好 - pi == 3.
  2. int pi{3.14}; // 编译错误: 缩窄转换.