C++ 向量初始化列表 VS 赋值

4

C++中,以下两种初始化vector的方式有什么技术上的区别?


    vector<int> v_1 {0, 1, 2};

    vector<int> v_2 = {3, 4, 5};

第一个是初始化列表,第二个是什么?
欢迎提供正确术语和参考文献以及不同标准版本的指引(C++98与C++11)。

2
第一个是list initialization。第二个是copy initialization - Some programmer dude
没有区别。这是为了保持语言语法的一致性而引入的。 - Argishti Ayvazyan
第一个是索引列表。第二个不是。 - user2039981
1
一个好的编译器会生成完全相同的代码,无论是哪种变体。 - Some programmer dude
1个回答

5
    vector<int> v_1 {0, 1, 2};

这是直接列表初始化,一种直接初始化形式。
使用提供的值构造了对象v_1
    vector<int> v_2 = {3, 4, 5};

这是复制列表初始化。在这种情况下,与直接列表初始化没有区别。
然而,仍有一个微小的语义差异,因为复制初始化不包括显式构造函数。
列表初始化语法(版本1和2)是在C++11中引入的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接