And*_*gia 4 c++ undefined-behavior
我想知道在这里的最后一个x中访问x是否是未定义的行为:
int f(int *x)
{
*x = 1;
return 1;
}
int x = 0;
if (f(&x) && x == 1) {
// something
}
Run Code Online (Sandbox Code Playgroud)
它定义明确.
参考 - C++ 03标准:
第5节:表达式,第4段:
除非注明[例如&&和||的特殊规则 ],单个运算符的操作数和各个表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.
而在,
第1.9.18节
在评估以下表达式时
Run Code Online (Sandbox Code Playgroud)a && b a || b a ? b : c a , b使用这些表达式中运算符的内置含义,在评估第一个表达式(12)之后有一个序列点.