int update(int& x) { x = 10; return 8; } int main(int argc, const char *argv[]) { int x = 5, y = 6; (x < y ? x : y) = update(x); }
上面的代码有序列点问题吗?编译器生成的代码能否先执行‘update’函数,然后根据条件运算符判断是否给x或y赋值?
首先,C++ 从 C++11 开始就没有序列点了。
从 C++17 开始,保证在
update(x)
(x < y ? x : y)
在 C++17 之前,未指定是否首先评估