Hin*_*sum 0 arrays anonymous mutable initializer-list c++11
C++标准是否说这std::initializer_list<T>是对本地匿名数组的引用?如果它说,那么我们永远不应该返回这样的对象.标准中的任何部分都这样说了吗?
另一个问题是,一个std::initializer_list<T>可变的基础对象?我试着修改它:
#include <initializer_list>
int main()
{
auto a1={1,2,3};
auto a2=a1;//copy or reference?
for(auto& e:a1)
++e;//error
for(auto& e:a2)
cout<<e;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但编译错误:错误:只读参考'e'的增量
如果我想更改initializer_list中的值,我该如何解决?
来自[dcl.init.list]:
类型的对象
std::initializer_list<E>是从初始化列表构造的,就好像实现分配了一个临时N的类型元素数组const E,其中N是初始化列表中元素的数量.使用初始化列表的相应元素对该数组的每个元素进行复制初始化,并std::initializer_list<E>构造该对象以引用该数组.
这应该回答你的两个问题:复制initializer_list不复制底层元素,底层元素是const你不能修改它们.
如果我想更改内部的值,我该如何解决
initializer_list?
不要使用initializer_list<int>.使用一个array<int, 3>或vector<int>其他容器.