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

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

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

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

    X x1 = X{1, 2};
    X x2 = {1, 2};
    X x3{1, 2};
    X * p = new X{1, 2};

    struct D : X {
        D(int x, int y) : X{x, y} {/* ... */}
    }

    struct S {
        int a[3];
        S(int x, int y, int z) : a{x, y, z} {/* ... */}
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容