Arrays C++;11:std::initializer\u list是否存储匿名数组?它是可变的吗? > C++标准是否说 STD::RealAlsiZiListList是对本地匿名数组的引用?如果它说,那么我们永远不应该返回这样的对象。标准中有没有这样的条款
另一个问题是,Arrays C++;11:std::initializer\u list是否存储匿名数组?它是可变的吗? > C++标准是否说 STD::RealAlsiZiListList是对本地匿名数组的引用?如果它说,那么我们永远不应该返回这样的对象。标准中有没有这样的条款,arrays,c++11,mutable,initializer-list,anonymous,Arrays,C++11,Mutable,Initializer List,Anonymous,另一个问题是,std::initializer\u list的底层对象是可变的吗?我试图修改它: #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; re
std::initializer\u list
的底层对象是可变的吗?我试图修改它:
#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;
}
#包括
int main()
{
自动a1={1,2,3};
自动a2=a1;//复制还是引用?
用于(自动和电气:a1)
++e、 //错误
用于(自动和电气:a2)
从文章中可以看出
从文章中
来自[dcl.init.list]:
类型为std::initializer\u list
的对象是从初始值设定项列表构造的,就像实现
已分配类型为const
的N
元素的临时数组,其中N
是
初始值设定项列表。该数组的每个元素都使用初始值设定项的相应元素进行复制初始化
列表,然后构造std::initializer\u list
对象以引用该数组
这应该可以回答您的两个问题:复制初始值设定项列表
不会复制基础元素,基础元素是常量
,因此您无法修改它们
如果我希望更改初始值设定项列表中的值,如何修复它
不要使用初始值设定项列表
。使用数组
或向量
或其他容器。来自[dcl.init.list]:
类型为std::initializer\u list
的对象是从初始值设定项列表构造的,就像实现
已分配类型为const
的N
元素的临时数组,其中N
是
初始值设定项列表。该数组的每个元素都使用初始值设定项的相应元素进行复制初始化
列表,然后构造std::initializer\u list
对象以引用该数组
这应该可以回答您的两个问题:复制初始值设定项列表
不会复制基础元素,基础元素是常量
,因此您无法修改它们
如果我希望更改初始值设定项列表中的值,如何修复它
不要使用初始值设定项列表
。使用数组
或向量
或其他容器。初始值设定项列表
是不可变的。初始值设定项列表
是不可变的。
Copying a std::initializer_list does not copy the underlying objects.