1. 程式人生 > >c++中的未定義行為

c++中的未定義行為

概念: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輸出值也由編譯器決定。