如何像if语句一样使用三元运算符
How to use ternary operator just as if statement?
我想使用三元运算符("?:")作为语句语句。确切地说,我想做这样的事情,如果(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;
相关文章:
- 三元运算符和 if constexpr
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 三元运算符在返回语句中给出意外的结果
- 递归中三元运算符的奇怪行为
- 错误:三元运算符无法在对象中正常工作"cout"
- 是否允许三元运算符在C++中计算两个操作数?
- 有条件地选择带有 decltype() 和三元运算符的类型
- 三元运算符在C++中的意外行为
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- 变量值,在三元运算符之后
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- c++中的增量和三元运算符优先级
- C++中三元运算符的意外行为
- 用于返回开关的三元运算符
- 替换模板元编程中的三元运算符
- 三元运算符 '?:' 在 4.9.0 之前的 GCC 版本中推断出不正确的类型?
- 在 std::map 上使用三元运算符和 std::更大的附加参数
- "Do nothing"在三元运算符的其他部分?
- 如何确定三元运算符的返回类型?
- 无法使用三元运算符有条件地分配"istream &"?