throw()
编译器可以在 C++ 中重新排序变量设置和操作吗?或者,标准 C++ 14882-1998 是否允许或禁止此转换的编译器?
对于代码:
bool funct()
{
bool succeeded = false;
bool res_throw = false;
try {
throw("it");
succeeded = true;
}
catch(...) {
res_throw = true;
}
cout << "Result of throw: " << res_throw << endl;
cout << "succeeded: " << succeeded << endl;
return succeeded;
}
输出可以是
Result of throw: true
succeeded: true
标准说:“[intro.execution]#7”:
修改一个对象..都是副作用,是执行环境状态的变化
在被称为序列点的执行序列中的某些指定点,之前评估的所有副作用都应该是完整的,并且后续评估的副作用应该没有发生
throw
语句是序列点吗?