如何使用条件(三元)运算符?

问题描述 投票:0回答:11

我一直想知道如何用 C++ 兼容语言编写

"A ? B : C"
语法。

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

If A > B
   C = A
Else
   C = B

有经验丰富的C++程序员可以帮帮我吗?

c++ conditional-operator
11个回答
68
投票

它的工作原理如下:

(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;

12
投票

它的工作原理如下:

expression ? trueValue : falseValue

这基本上意味着,如果

expression
计算结果为 true,则 trueValue 将被返回或执行,如果不是,则 falseValue 将被返回或计算。

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


4
投票

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

C = A > B ? A : B;

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


2
投票

我想你的意思是像 a = b 这样的东西? c : d,其中b是条件,c是b为真时的值,d是b为假时的值。


1
投票

我会说?是一条捷径。然而,一些“硬核”程序员倾向于说把它写得很长,这样在将来的情况下,人们可以轻松阅读和修改代码。

例如,如果你写

int a = b<c ? b : c;

有人声称这样写更清晰:

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

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

似乎没有人提到条件运算符表达式的结果可以是 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;

1
投票

0
投票

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

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

示例:

hey=24>2?24:34;

这里因为条件是真实的,所以值 24 将被分配给它。 如果它是 false 那么 34 将被分配给它


0
投票

你可以简单地写成

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

这与:

相同
if(A>B)

 C=A;

else

 C=B;

0
投票

这称为“三元运算符”,

?
:
是编写 if-else 语句的另一种方式。

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

现在注释“示例#1”,取消注释“示例#2”,看看会发生什么。该代码执行完全相同的操作...但这次只有 5 行代码。请注意,出现在

?
符号之前的内容都是
if
(条件),而出现在
:
之后的内容都是要执行的内容。

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


0
投票

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


0
投票

或者以与口头对应的方式相同的方式读出它:

if-?-then-:-else

© www.soinside.com 2019 - 2024. All rights reserved.