#include <iostream>
#include <cmath>
#define max(x,y) (x)>(y)? (x): (y)
int main() {
int i = 10;
int j = 5;
int k = 0;
k = max(i++,++j);
std::cout << i << "\t" << j << "\t" << k << std::endl;
}
答案 0 :(得分:12)
不,它没有。
在这种情况下,?:
运算符在计算第一个操作数(条件)之后立即有序列点这一事实可以保存情况,之后只有两个表达式中的一个(第二或第三操作数)被评估。您的代码等同于
...
bool c = i++ > ++j;
k = c ? i++ : ++j;
...
这里没有未定义的行为。
答案 1 :(得分:4)
嗯,肯定有很多问题。
此代码每次运行时都会产生相同的结果,所以不,它不是未定义的。在cout:
i = 11
k = 7
j = 7
这听起来像是一个糟糕的家庭作业问题。 :)