【问题标题】:How do I use the conditional (ternary) operator?如何使用条件(三元)运算符?
【发布时间】:2010-09-28 10:06:01
【问题描述】:

我一直想知道如何用 C++ 兼容的语言编写 "A ? B : C" 语法。

我认为它的工作原理类似于:(伪代码)

If A > B
   C = A
Else
   C = B

有没有资深的 C++ 程序员可以帮帮我吗?

【问题讨论】:

    标签: c++ conditional-operator


    【解决方案1】:

    它是这样工作的:

    (condition) ? true-clause : false-clause
    

    它最常用于赋值操作,尽管它也有其他用途。三元运算符?是缩短if-else子句的一种方式,在其他语言中也称为立即if语句(例如VB中的IIf(condition,true-clause,false-clause))。

    例如:

    bool Three = SOME_VALUE;
    int x = Three ? 3 : 0;
    

    相同
    bool Three = SOME_VALUE;
    int x;
    if (Three)
        x = 3;
    else
        x = 0;
    

    【讨论】:

    • 此外,如果 x 在您的示例中是 const int,则三元版本将是编译的唯一选择。
    • 初始化三不是更好吗?
    • Shmoopty - 非常正确,因为您只能在声明常量时对其进行初始化。乔纳森 - 是的,是的。已编辑。也许我应该改用“//三是布尔值”。
    【解决方案2】:

    它是这样工作的:

    expression ? trueValue : falseValue
    

    这基本上意味着如果expression评估为true,则将返回或执行trueValue,否则将返回或评估falseValue。

    请记住,trueValue 和 falseValue 仅在表达式分别为 true 或 false 时才会被计算和执行。这种行为称为短路。

    【讨论】:

      【解决方案3】:

      在 c++ 中没有实际的 if 部分。它被称为三元运算符。它是这样使用的: : ;对于上面的示例,它看起来像这样:

      C = A > B ? A : B;
      

      维基百科上的这篇文章也讨论了它: http://en.wikipedia.org/wiki/Ternary_operation

      【讨论】:

        【解决方案4】:

        我假设您的意思是 a = b 之类的东西? c : d,其中b为条件,c为b为真时的值,d为b为假时的值。

        【讨论】:

          【解决方案5】:

          我会说 ?是一个捷径。然而,一些“铁杆”程序员倾向于说把它写出来,以便在未来的情况下,人们可以轻松地阅读和修改代码。

          例如,如果你写

          int a = b<c ? b : c;
          

          有人声称这样写更清楚:

          if(b<c)
           a = b;
          else
           a = c;
          

          因为在未来的情况下,人们可以抓住它。当然,一个简单的 b

          【讨论】:

          • 您的示例对于典型用例来说是最直接的。正确的术语是“三元运算符”,它们很容易理解并在许多语言中使用类似的语法。例如,在 R 中,相同的语句是 a = ifelse(b&lt;c, b, c)。在 PHP 中,它将是 $a = ($b&lt;$c) ? b : c;。对于简单的情况,例如单行语句,我更喜欢三元运算符。对于多行语句,我会使用传统的方式来获得更清晰的逻辑结构。
          【解决方案6】:

          似乎没有人提到条件运算符表达式的结果可以是 C++ 中的 L 值(但不能在 C 中)。以下代码在 C++ 中编译并运行良好:

              int a, b;
              bool cond;
              a=1; b=2; cond=true;
              (cond? a : b) = 3;
              cout << a << "," << b << endl;
          

          上面的程序打印 3, 2

          然而,如果 a 和 b 是不同的类型,它就行不通了。以下代码给出了编译器错误:

              int a;
              double b;
              bool cond;
              a=1; b=2; cond=true;
              (cond? a : b) = 3;
              cout << a << "," << b << endl;
          

          【讨论】:

            【解决方案7】:

            这很简单 它的基本语法是: 表达式1?表达式2:表达式3;

            如果表达式 1 为真,则表达式 2 将成立,否则表达式 3 将成立。

            示例:

            hey=24&gt;2?24:34;

            这里条件为真值 24 将分配给它。 如果它是假的,那么 34 将被分配给它

            【讨论】:

              【解决方案8】:

              你可以这么写

              C=(A>B)?A:B;

              这是一样的:

              if(A>B)
              
               C=A;
              
              else
              
               C=B;
              

              【讨论】:

                【解决方案9】:

                这称为“三元运算符”,?: 是另一种编写 if-else 语句的方式。

                查看Codepen 中的“示例 #1”,然后取消注释...您会注意到它的作用。

                现在评论“Example #1”,取消评论“Example #2”,看看会发生什么。代码做了完全相同的事情……但这次只有 5 行代码。请注意? 符号之前出现的内容是if(条件),: 之后出现的内容是要执行的内容。

                但是,如果您有一个条件,需要像 Codepen 的“示例 #3”(这增加了用户写出特定错误答案的可能性)中的“else-if”(具有超过 2 种可能的结果),该怎么办? )?那么三元运算符可能就没那么有用了,但您当然可以将多个条件与三元运算符连接起来,就像在这个 ES6 fizzbuzz 示例中一样。

                【讨论】:

                • StackOverflow 条目应该是独立的。请不要依赖外部网站提供相关信息。链接会随着时间而中断。将适当的部分直接复制到您的答案中。在这种情况下,您所指的代码示例。或者提供您自己的代码示例。
                【解决方案10】:

                这就是我们的条件 -> A?B:C 因此,根据条件,如果“A”为真,则打印“B”,如果“A”为假,则打印“C”。 换句话说,我们也可以说它是 if else 条件的另一种方式。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-09-18
                  • 2012-02-22
                  相关资源
                  最近更新 更多