是什么决定了是否计算逗号运算符的右操作数



我对三元条件中逗号运算符操作数的求值规则感到困惑。为什么对++x、-a和-b求值而不对++y求值?

#include <iostream>
int main()
{
int x = 10;
int y = 10;
true ? ++x, ++y : --x, --y;
std::cout << x << " " << y << std::endl; // output: 11 10
int a = 10;
int b = 10;
false ? ++a, ++b : --a, --b;
std::cout << a << " " << b << std::endl;   // output: 9 9
}

发件人https://en.cppreference.com/w/cpp/language/operator_precedence#cite_note-2我可以读:";条件运算符中间(介于?和:之间(的表达式被解析为带括号:其相对于?的优先级:被忽略">

有人可以解释,为什么y在第一个条件中不递增?

它运行++y,也运行--y

true ? ++x, ++y : --x, --y;被解析为(true ? (++x, ++y) : --x), --y;。只有--x?运算符的伪部分的一部分,--y是独立执行的。

true ? ++x, ++y : (--x, --y);

会给你预期的结果。

https://godbolt.org/z/3rrfMonh4

最新更新