: ++ (* P)을 수행 할 때포인터를 사용하여 initializer_list에서 C++ 11 요소를 수정하면 SIGSEGV가 발생합니다. 이유가 무엇입니까? I는 다음과 같이 initializer_list 내부 요소를 수정에 const_cast를 사용 하였다
#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;
}
불행히도,이 g ++ 4.9.2 컴파일 된 프로그램은 SIGSEGV 던진다. 문제는 VC에서 발생하지 않습니다.
내 프로그램이 안전하지 않은 작업을하는 이유는 무엇입니까? 도와주세요, 고마워요.
'auto a2 = a1; '은 참조가 될 수 없으며 복사본 만 될 것입니다. 참조를 원한다면 'auto & a2 = a1;'과 같이 명시 적으로 입력해야합니다. –
castee에 대해 'const_cast'와 mutation을 수행했는데 프로그램에 "안전하지 않은 연산이 있는지"를 알고 싶습니까? –