C++中的編譯器可以重新排序變量設置和throw()
op嗎?或者,標準的C++ 14882-1998允許或禁止該轉換的編譯器?C++中的序列點和異常
對於代碼:
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
語句順序點?
「分號是一個序列點」 - 請幫助我在標準14882(頁面或節號或節名稱)中找到它 – osgx 2010-12-06 17:44:33
@osgx:「在完整表達式的評估結束時(§1.9/ 16) (完整表達式不是另一個表達式的子表達式。)「 – 2010-12-06 17:46:52