是什么 ”?”和“:”序列实际上被称为?

时间:2013-09-05 14:22:38

标签: c++ idioms conditional-operator

这可能是一个傻瓜问题,但我无法弄清楚调用? exp : other_exp序列是什么。

示例:

int result = (true) ? 1 : 0;

我已经尝试过使用谷歌机器了,但是在不知道它叫什么的情况下Googilize很难做到。

谢谢!

2 个答案:

答案 0 :(得分:18)

它被称为条件运算符,或者可选地称为三元运算符,因为它是一个三元运算符(一个运算符,它接受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分配值1

注1;在使用条件运算符时,人们常犯的一个错误就是忘记它有一个相当低的operator precedence

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

let value = if b then 1 else 2

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

(condition ? x : y) = 1;

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

condition ? x : (y = 1);

答案 1 :(得分:2)

他们被称为shorthand if-elseternary operators

有关详细信息,请参阅此article