以下示例中的if語句來自我正在嘗試再次構建的舊項目。對不起,這不是一個可驗證的樣本,因爲它不會重現錯誤,它本身編譯得很好。 enum S { };
struct R {
S type, state;
double height;
};
int main()
{
int rows;
S alive, rc;
double h;
下面是一個例子片斷: int i = 4,b;
b = foo(i++) + foo(i++);
我敢肯定它不是未定義,因爲那裏是foo調用之前的序列點。但是,如果我使用-Wall標誌編譯代碼,則會生成編譯器警告,其中說明warning: operation on 'i' may be undefined。我意識到它說may,但我只是想仔細檢查我是否正確。
衆所周知,該標準C++ 11保證傳遞給函數的臨時對象將被之前的函數調用創建:Does standard C++11 guarantee that temporary object passed to a function will have been created before function call? 但是,沒有標準的C++ 11保證傳遞給函數的臨時對象將有功能結束後(而不是之前)被銷燬?