[关闭]
@why-math 2014-12-27T07:31:47.000000Z 字数 482 阅读 1045

C++11中的统一初始化方式

C++11


C++03中有很多种初始化方式:

  1. std::string a[] = {"Hello", "world"}; // 正确:初始化数组变量
  2. std::vector<std::string> v = {"hello", "world"}; // 错误:初始化列表引用在非聚合的向量上
  3. void f(string a[]);
  4. f ({"foo", "bar"}); // 语法错误,把一个块(block)作为了参数
  5. int a = 2; // "赋值风格"的变化
  6. int aa[] = {2, 3}; // 用初始化列表进行的赋值风格的初始化
  7. complex z(1, 2); // 函数风格的初始化
  8. x = Ptr(y); // "函数风格" 转换/赋值/构造操作

C++11中的统一的初始化方式:

  1. X x1 = X{1, 2};
  2. X x2 = {1, 2};
  3. X x3{1, 2};
  4. X * p = new X{1, 2};
  5. struct D : X {
  6. D(int x, int y) : X{x, y} {/* ... */}
  7. }
  8. struct S {
  9. int a[3];
  10. S(int x, int y, int z) : a{x, y, z} {/* ... */}
  11. }

统一的初始化方式可以减少编程中的错误, 使得代码更易阅读.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注