【C++】C++未定义行为
- 未定义行为:语言标准没有规定,编译器自行决定的行为,在不同的编译器上有时会有不同的结果。
- 1:
int i=0;
i=i++;
-
我们知道i++会返回i之后再自增,那么程序运行完i为多少?
-
解释一:
i=i;i++;
先赋值再自增。 -
解释二:
i++;i=i;
先自增再赋值。 -
2:
int i=0,j=0;
i=i+++j;
-
我们发现i和j中间有3个加号,现在也有两种解释。
-
解释一:
i=(i++)+j
,i先加上j再做自增。 -
解释二:
i=i+(++j)
,j先做自增再加上i。 -
3:
int i=0;
printf("%d %d",++i,++i);
-
这是一个关于输出顺序的问题究竟输出的是,1,2;2,1,还是其他的?
-
4:
const int a = 1;
int *b = (int*)&a;
*b = 2;
- 此时输出a,a的值为多少?1还是2?