【发布时间】:2013-09-11 05:01:46
【问题描述】:
是否可以为三元运算符提供一个空白的第二或第三个参数,或者有一个非上下文特定且意味着“什么都不做”的参数?在下面的示例中,我希望一个三元运算符将一个整数变量乘以 2,如果它是偶数,否则什么也不做。除了自赋值、加或减零或乘以或除以一之外,我想不出第三个参数的任何东西。无论如何,它们都是特定于上下文的。我想要对所有三元运算符都意味着“什么都不做”的东西。我尝试将参数留空,但无法编译。
#include <iostream>
int main()
{
int x = 5;
(x % 2 == 0) ? x *= 2 : x = x; // or x += 0, x -= 0, x *= 1, or x /= 1
std::cout << x << std::endl;
return 0;
}
是否有任何解决方案不涉及重述已经存在的变量、函数或对象?例如,考虑两个函数foo 和goo,其中foo 返回bool。假设由于某种原因,这两个函数都不能再次调用,例如后续调用中的状态更改。
int main()
{
( foo() ) ? goo() : ; // won't compile
return 0;
}
【问题讨论】:
-
这通常是这样写的:
x = (x % 2 == 0) ? x * 2 : x; -
这可行,但它只是一种看起来很奇怪的方式:
(x % 2 == 0) ? x *= 2 : 0; -
只需使用
if。最好像这样:if (is_even(x)) x *= 2;(即:一个函数)。 -
如果您正在寻找混淆,请继续您当前的道路。如果您希望人们即使一目了然 也能理解您的代码,请注意@GManNickG 的建议;使用
if。 -
这里不需要三元运算符。
if (x % 2 == 0) x *= 2;干净多了。
标签: c++ c++11 ternary-operator conditional-operator