【问题标题】:What is the "?" and ":" sequence actually called? [duplicate]是什么 ”?”和“:”序列实际调用? [复制]
【发布时间】:2013-09-09 10:34:34
【问题描述】:

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

例子:

int result = (true) ? 1 : 0;

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

谢谢!

【问题讨论】:

  • 条件运算符或ternary operator.
  • 这可以用谷歌搜索为“问号冒号运算符”。
  • 还有,StackOverflow自己的搜索比较严谨,能识别?:字符,类似情况也可以使用。
  • 你学习 C++ 的哪本书告诉你关于运算符而不告诉你它的名字?
  • 你应该考虑买一本书。您当地的图书馆可能很少。

标签: c++ idioms conditional-operator


【解决方案1】:

它被称为条件运算符或三元运算符,因为它是一个三元运算符(一个需要 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
  • 其实定义为logical-or-expression ? expression : assignment-expression 按标准,其中 assignment-expression 可以是 conditional-expressionthrow-expression 或赋值(=、*=、+= 等)
  • @ArneMertz;我显然读错了 BNF,感谢您的纠正,我已经编辑了我的答案。
  • 很好的解释,比我需要的更详细,但仍然很清楚。
  • 我喜欢你包含了最后一个注释。
【解决方案2】:

它们被称为shorthand if-elseternary operators

请参阅此article 了解更多信息。

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 2021-09-17
    • 1970-01-01
    • 2019-12-18
    • 2020-09-20
    • 2010-12-06
    • 2011-05-25
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多