如何使用三元运算符就好像声明一样?

时间:2017-01-04 18:50:08

标签: c++

我想使用三元运算符(“?:”)作为语句语句。准确地说,我想做这样的事情,if(temp> 0)所以增加'i'否则什么都不做。

          temp?i++:WHAT_SHOULD_COME_HERE_SO_NO_CHANGES_ARE_MADE_ANYWHERE

4 个答案:

答案 0 :(得分:6)

答案

严格地说,你不能这样做:

(boolean expression) ? (returning expression) : /* no-op */;

东西必须进入第三个操作数。但是,就评估三元运算符的后置条件而言,您可以使“某事”在行为上等同于无操作。见下文。

解释

三元运算符必须返回一个值,并且该类型被推断为最派生类型,它是每个第二个和第三个操作数的返回类型的超类型。因此,如果第三个操作数是空白表达式(即它不返回任何内容),则编译器不能推断整个操作符的返回类型。因此,它不会编译。

解决方案

使用三元运算符:

如果您真的想要,可以使用三元运算符来实现它:

i = temp>0 ? i+1 : i;

temp>0 ? ++i : i;

首选语法:

虽然如果您要查找的只是单行,那么首选以下语法:

if (temp>0) ++i;

答案 1 :(得分:4)

这将有效:

(void) ((temp>0)?i++:0);  

注意(void)不会改变代码的行为;相反,它是指向读者(和/或您将来可能调用的任何样式检查程序)表示故意丢弃表达式的结果。如果没有它,您可能会收到编译器和/或其他程序员的警告,他们怀疑存在错误并试图修复"你的代码。

实际上,无论如何,你可能会得到它,因为以上是表达你想要做的事情的一种非常不寻常的方式。如果您使用传统形式,代码将更容易让其他人理解和维护:

if (temp>0) i++;

答案 2 :(得分:2)

三元运算符用于表达式。因此,整个表达式必须求值为单个值。这意味着您必须同时提供“if”和“else”子句。没有办法将“其他”部分留空。

此外,在诸如此类的表达式中嵌入增量运算符是不可取的,因为副作用的后果非常容易出错。

答案 3 :(得分:0)

你可以:

    int temp = 20, i = 0;

    (temp)? i++: i;

    cout << i << endl;