我能说答案错了吗?
a+= a; b+= b; // 带入3和4,a=6,b=8
c = f1(a+b, ++b); // a+b的值是14,++b取自加后值,是9
f1(14, 9)
{
c = b%2; 取余是1
return a+c; // 14+1,返回15
}
我能说出题者是SB么?
f1(a+b, ++b)中a+b和++b的计算顺序是不确定的,编译器可以理解成(而且看起来确实理解成了)先计算++b,后计算a+b,因此f1的前一个参数值是15,后一个参数的值是9,所以输出是16
对于这种代码,clang和g++编译器都会报错,因为语句f1(a+b, ++b);的行为在标准中没有定义,这样的代码是不可移植的