【发布时间】:2015-07-21 02:20:45
【问题描述】:
我熟悉三元运算符已经有一段时间了,并且使用过几种不同的语言。我对运营商的理解是这样的:
condition ? expr1 : expr2
但是,在 C++ 中,以下代码是合法的:
int i = 45;
(i > 0) ? i-- : 1;
实际上,您不只是写1; 或i - 1;这是一个完整的声明吗?我知道代码的目的是减少 i 如果它大于 0,但我认为代码会产生编译器错误,因为它只是一个表达式,而不是一个完整的语句。我期望这样的代码:
int i = 45;
i = (i > 0) ? i - 1 : i;
【问题讨论】:
-
这与您可以调用非 void 函数而不将其结果分配给任何东西的原因相同。语言规范不允许这样做,编译器可以理解。
标签: c++ ternary-operator