代码如下:
#include<stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
printf("%d,%d,%d,%d\n", a = b = c, a = b == c, a == (b = c), a == (b == c));
return 0;
}
输出:
为什么第二个数是3?
代码如下:
#include<stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
printf("%d,%d,%d,%d\n", a = b = c, a = b == c, a == (b = c), a == (b == c));
return 0;
}
输出:
为什么第二个数是3?
1 回答3.3k 阅读
1.1k 阅读
87 阅读
在C++中,函数调用表达式中函数参数的求值顺序以及任何表达式中子表达式的求值顺序都是未定义的,例如
f(f1(a),f2(b),f3(c))
的f1(a)
、f2(b)
和f3(c)
的求职顺序是未定义的,例如printf("%d,%d\n",++n,power(2,n))
的结果是未定义的;相似地,因为文中printf
的四个参数的执行顺序是未定义的,所以printf
的结果也是未定义的,可能根据编译器的不同而不同。可以参考这里、cppreference和stackoverflow。