我对三元条件中逗号运算符操作数的求值规则感到困惑。为什么对++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