请看下面的代码:
std::vector<int> v1{1, 2, 3};
std::vector<int> v2 = {1, 2, 3};
我的问题是:
两者有区别吗?我知道第一个肯定是列表初始化,但是第二个呢?
因为第二个有一个赋值符号,这让我觉得编译器会首先使用
std::initializer_list
创建一个临时的vector
,然后它使用复制构造函数将临时vector
复制到v2
。这是事实吗?
最佳答案
在这种情况下,两个 ( direct-list-initialization vs copy-list-initialization) 完全相同。没有构造临时 std::vector
并且没有调用 std::vector::operator=
。等号是初始化语法的一部分。
如果 std::vector
's constructor overload no. 7 会有不同被标记为 explicit
,在这种情况下,任何复制初始化都会失败,但这将是标准库设计中的一个缺陷。
关于c++ - 列表初始化的形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38582981/