c++ - 列表初始化的形式

标签 c++ c++11 initialization initializer-list list-initialization

请看下面的代码:

std::vector<int> v1{1, 2, 3};
std::vector<int> v2 = {1, 2, 3};

我的问题是:

  1. 两者有区别吗?我知道第一个肯定是列表初始化,但是第二个呢?

  2. 因为第二个有一个赋值符号,这让我觉得编译器会首先使用 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/

相关文章:

c++ - RapidXML: "expected <"文件末尾错误与空白错误相关?

C++:缓存 JSON 而不是对象会减少内存消耗吗?

c++ - 带有 vector 值声明的 Netbeans IDE 8.0.2 C++ 代码帮助问题映射

c++ - 如何在 emacs 的一列中对齐 C++ 类成员名称?

c++11 - "no viable conversion"带有柠檬用于 clang 但对 g++ 有效

c++ - EXEC BAD ACCESS 遍历 vector

java - 如何将返回的数组重新分配给java中预先存在的数组

C++ 初始化为函数

java JMenuItem NullpointerException(覆盖 swing 类时初始化错误)

c++ - 在嵌入式编程中避免使用全局变量