如何像if语句一样使用三元运算符

How to use ternary operator just as if statement?

本文关键字:三元 运算符 一样 何像 语句 if      更新时间:2023-10-16

我想使用三元运算符("?:")作为语句语句。确切地说,我想做这样的事情,如果(temp>0),那么增加"I",其他什么都不做。

temp?i++:WHAT_SHOULD_COME_HERE_SO_NO_CHANGES_ARE_MADE_ANYWHERE

答案

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

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

第三个操作数中必须包含一些。然而,根据评估三元运算符的后条件,可以使"某物"在行为上等效于无运算。请参见下文。


说明

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


解决方案

使用三元运算符:

如果你真的想这样做,这就是你可以使用三元运算符的方法:

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

temp>0 ? ++i : i;

首选语法:

尽管如果您所要查找的只是一行,那么以下语法是首选语法:

if (temp>0) ++i;

这将起作用:

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

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

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

if (temp>0) i++;

三元运算符用于表达式中。因此,整个表达式必须计算为一个值。这意味着您必须同时提供"if"answers"else"条款。没有办法将"其他"部分留空。

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

您可以:

int temp = 20, i = 0;
(temp)? i++: i;
cout << i << endl;