更新:正如用户ecatmur所标记的,它是在 C99 中的副本,是 f()+g() 未定义还是未指定?(虽然问题是关于 C99 的,但 C++ 的答案是不变的)。答案是:未指定(对于这两种情况)。
考虑以下 C++14 代码片段:
int i = 0;
int x() { i++; return i;}
int y() { i++; return i;}
bool z = (x() > y()); // unspecified or undefined ?
z
仅仅是未指定的值,还是未定义的行为?
根据我的理解(如果我错了,请更正),这样的表达式:i++ > i++
将是未定义的行为,因为我们在一对序列点之间对相同的变量进行两次变异,但是上面的情况呢(变异发生在单独的职能) ?
那这个呢:
bool z = (x() > i++); // undefined or unspecified now ?