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输出值也由编译器决定。

猜你喜欢

转载自blog.csdn.net/DALAOS/article/details/86164277
今日推荐