我想使用三元运算符(“?:”)作为语句语句。准确地说,我想做这样的事情,if(temp> 0)所以增加'i'否则什么都不做。
temp?i++:WHAT_SHOULD_COME_HERE_SO_NO_CHANGES_ARE_MADE_ANYWHERE
答案 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;