5

这可能是一个愚蠢的问题,但我无法弄清楚这个? exp : other_exp序列被称为什么。

例子:

int result = (true) ? 1 : 0;

我尝试过使用 Google 机器,但是在不知道它叫什么的情况下很难用谷歌搜索一些东西。

谢谢!

4

2 回答 2

19

它被称为条件运算符或三元运算符,因为它是一个三元运算符(一个接受 3 个操作数(参数)的运算符),并且因为它通常是唯一的运算符,所以它可以做到这一点。

它也被称为内联 if (iif)、三元 if 或问号运算符。

它实际上是一个相当有用的特性,因为它们是表达式,而不是语句,因此可以用于例如constexpr函数、赋值等。

C++ 语法是;

logical-or-expression ? expression : assignment-expression

它被用作;

condition ? condition_is_true_expression : condition_is_false_expression

也就是说,如果condition计算结果为true,则表达式计算结果为 ,condition_is_true_expression否则表达式计算结果为condition_is_false_expression

因此,在您的情况下,result将始终分配 value 1

注1;使用条件运算符时常犯的一个错误是忘记了它的运算符优先级相当低。

笔记2; 一些函数式语言不提供此运算符,因为它们具有表达式'if...else'构造,例如 OCaml;

let value = if b then 1 else 2

注3;一个完全有效的有趣用例是使用条件运算符来决定将值分配给两个变量中的哪一个。

(condition ? x : y) = 1;

请注意括号是必要的,因为这实际上是没有它们的结果;

condition ? x : (y = 1);
于 2013-09-05T14:24:17.247 回答
2

它们被称为shorthand if-elseternary operators

有关更多信息,请参阅本文

于 2013-09-05T14:25:50.990 回答