【问题标题】:Setting a vector equal to {};设置一个等于 {} 的向量;
【发布时间】:2020-02-08 02:46:58
【问题描述】:

以下代码是始终有效还是依赖于编译器/平台?显然,我可以使用 value 构造函数初始化 edges,但我很想知道当 edges 初始化为大小 0 时,复制赋值 operator= 是否在这里工作,然后设置为等于一个带括号的 r 值。

它适用于我的 macbook。

std::vector<std::vector<int>> edges;
edges = {{1,2,3},{4},{5,6}};

【问题讨论】:

  • 你在担心什么? std::vector 有一个operator= 占用std::initializer_list&lt;T&gt;
  • @songyuanyao 在 C++ 中,用大括号括起来的事物列表是否总是等同于 std::initializer_list
  • 并非总是如此。传递大括号列表时,将首选采用 std::initializer_list&lt;T&gt; 的函数。
  • 哦,我明白了。我想我的问题是受到以下事实的启发:我不确定edges = 的右侧是否默认为 std::initializer_list

标签: c++ c++11 vector variable-assignment initializer-list


【解决方案1】:

有效(C++11 起)。 std::vector 有一个重载的operator= 占用std::initializer_list

用初始化列表ilist标识的内容替换内容。

std::initializer_list 可以在指定上下文中从花括号列表构造。

(强调我的)

std::initializer_list 对象在以下情况下自动构造:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多