c++中的未定義行為
阿新 • • 發佈:2019-01-13
概念:C語言中的未定義行為(Undefined Behavior)是指C語言標準未做規定的行為;
1.同一運算子中多個運算元的計算順序(&&、||、?和,運算子除外)
例如:x = f()+g(); //錯誤
f()和g()誰先計算由編譯器決定,如果函式f或g改變了另一個函式所使用變數的值,那麼x的結果可能依賴於這兩個函式的計算順序。
2.函式各引數的求值順序
例如: printf("%d,%d\n",++n,power(2,n)); //錯誤
在不同的編譯器可能產生不同的結果,這取決於n的自增運算和power呼叫誰在前誰在後。
需要注意的是,不要和逗號表示式弄混,逗號表示式可以參考這篇文章: c語言中逗號運算子和逗號表示式
3.通過指標直接修改 const 常量的值
直接通過賦值修改const變數的值,編譯器會報錯,但通過指標修改則不會,例如:
int main() { const int a = 1; int *b = (int*)&a; *b = 21; printf("%d, %d", a, *b); return 0; }
1 2 3 4 5 6 7 8 9 |
int main ( ) { const int a = 1 ; int * b = ( int * ) & a ; * b = 21 ; printf ( "%d, %d" , a , * b ) ; return 0 ; } |
a輸出值也由編譯器決定。