Iam*_*non 4 c++ vector variable-assignment initializer-list c++11
以下代码始终有效还是依赖于编译器/平台?显然,我可以edges使用值构造函数进行初始化,但是我很好奇operator=在edges初始化为大小 0时复制赋值是否在此处工作,然后设置为等于带括号的 r 值。
它适用于我的 macbook。
std::vector<std::vector<int>> edges;
edges = {{1,2,3},{4},{5,6}};
Run Code Online (Sandbox Code Playgroud)
它是有效的(自 C++11 起)。std::vector有一个超载的operator=服用std::initializer_list。
用初始化列表标识的内容替换内容
ilist。
并且std::initializer_list可以在指定的上下文中从支撑列表构造。
(强调我的)
在以下情况下
std::initializer_list会自动构造对象:
- 一个花括号初始化列表用于列表初始化一个对象,其中相应的构造函数接受一个
std::initializer_list参数- 花括号初始化器列表用作赋值的右操作数或函数调用参数,相应的赋值运算符/函数接受一个
std::initializer_list参数- 花括号初始化列表绑定到auto,包括在一个范围内的 for 循环中