我使用的const_cast修改元素的initializer_list内,象下面这样:C++ 11使用指针修改initializer_list中的元素导致SIGSEGV,为什么?
#include <initializer_list>
int main()
{
auto a1={1,2,3};
auto a2=a1;//copy or reference?
for(auto& e:a1)
{
int*p=const_cast<int*>(&e);
++(*p);
}
for(auto& e:a2)
cout<<e;
return 0;
}
不幸的是,这样做++(* P)时该克++ 4.9.2编译程序引发SIGSEGV。这个问题在VC中不会发生。
为什么会这样,是有任何不安全的操作我的程序?请帮忙,谢谢。
'auto a2 = a1;'永远不会成为参考,只是一个副本。如果你想要一个引用,你需要像'auto&a2 = a1;'那样显式地指定'' –
你执行了一个'const_cast',然后是一个变种,你想知道你的程序是否“有任何不安全的操作”? –