我已经用g++版本4.8.2编译并运行以下C++代码:
vector<int> ivec{0,1,2};
int& iref = ivec[1];
for (int i=3;i<100;++i)
ivec.push_back(i);
iref = 10;
cerr<<"After Error"<<'\n';
return 0;
程序将按预期在
iref = 10;
行崩溃,因为该引用无效。但是字符串"After Error"
被打印出来。为什么?这个问题的答案对我很重要,因为在大多数情况下,我都是使用
cout
或cerr
查找导致运行时错误的行。 最佳答案
您的程序具有未定义的行为,因为push_back
使引用iref
无效。 C++标准未指定程序执行的任何行为。在C++上下文中无法回答问题“为什么”。
关于c++ - 发生错误后执行的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30921009/