mis*_*tor 4 c++ undefined-behavior
#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;
}
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 12
不,它没有.
在这种情况下,通过?:操作符在评估第一个操作数(条件)之后立即具有序列点并且之后仅评估两个表达式(第二或第三操作数)中的一个来保存情况.你的代码相当于
...
bool c = i++ > ++j;
k = c ? i++ : ++j;
...
Run Code Online (Sandbox Code Playgroud)
这里没有未定义的行为.