"?"和":"序列实际上被称为什么?"

5
这可能是一个低级问题,但我无法弄清楚? exp : other_exp序列被称为什么。
例如: int result = (true) ? 1 : 0; 我已经尝试使用Google搜索引擎,但不知道它的名称很难进行搜索。
谢谢!

3
条件运算符,也称为三元运算符。 - Shafik Yaghmour
1
这可以被谷歌搜索为“问号冒号运算符”。 - Dialecticus
2
此外,StackOverflow 的搜索更加严格,能够识别 ?: 字符,并可在类似情况下使用。 - Dialecticus
1
你正在学习哪本C++书籍,它告诉了你运算符的使用方法,但没有告诉你它的名称? - Rob Kennedy
3
你应该考虑去找一本书,你当地的图书馆可能有几本。 - Rob Kennedy
显示剩余3条评论
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 将始终被赋值为1

注意1:在使用条件运算符时,常见的错误是忘记它具有相对较低的运算符优先级

注意2:某些函数式语言不提供此运算符,而是使用表达式'if...else'结构,例如OCaml;

let value = if b then 1 else 2

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

(condition ? x : y) = 1;

请注意,括号是必要的,因为没有它们,您将得到的结果与您期望的不同;

condition ? x : (y = 1);

很好的解释,非常清晰 +1 - Code Guru
实际上,根据标准,它被定义为 logical-or-expressionexpressionassignment-expression,其中 assignment-expression 可以是 conditional-expressionthrow-expression 或者赋值(=,*=,+= 等)。 - Arne Mertz
@ArneMertz;我显然阅读了错误的BNF,感谢您的纠正,我已经编辑了我的回答。 - Skeen
很好的解释,比我需要的更详细,但依然清晰易懂。 - Tyler Jandreau
我很喜欢你加入了最后的那个注释。 - KitsuneYMG

2
他们被称为“速记if-else”或“三元运算符”。详情请见这篇文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接