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.