C++ 你能帮我分析一下这个代码到底在做什么吗?如果((a=b>;c?d:e)=e)a++;;

C++ 你能帮我分析一下这个代码到底在做什么吗?如果((a=b>;c?d:e)=e)a++;;,c++,c,syntax,ternary-operator,C++,C,Syntax,Ternary Operator,答案是a=2 我不明白这到底在做什么 你能帮我一步一步地弄清楚这段代码是做什么的吗 int a = 2, b = 3, c = 5, d = 4, e = 1; if ((a = b > c ? d : e) == e) a++; 等于: if ((a = b > c ? d : e) == e) a++; 还可以看看:我想这是你想知道的主要地方 a?b:c称为条件运算符,意思是如果a为真,则使用b,否则使用c if (b > c) a = d; else

答案是a=2

我不明白这到底在做什么

你能帮我一步一步地弄清楚这段代码是做什么的吗

int a = 2, b = 3, c = 5, d = 4, e = 1;

if ((a = b > c ? d : e) == e) a++;
等于:

if ((a = b > c ? d : e) == e) a++;

还可以看看:

我想这是你想知道的主要地方

a?b:c称为条件运算符,意思是如果a为真,则使用b,否则使用c

if (b > c)
    a = d;
else
    a = e;
if (a == e)
    a++;
等于

(a = b> c? d : e) 

首先,所谓的三元运算符(带?标记)检查条件(
b>c
):

并将值
e
赋给变量
a
(因为条件失败,所以选择了第二个选项),因此,
a=1

然后它检查变量
a
是否等于
e
(它是
true
),并相应地将变量
a
增加1,因此变为2

注:看起来最关键的部分是学习三元运算符和C中的操作优先级

a= b > c ? d : e
  • b>c
    返回
    false
  • 错误?d:e
    返回
    e
    ,即
    1
  • a=1
    1
    赋值给
    a
    并返回
    a
  • 1==e
    true
  • if(true)a++
    1

  • 因此,
    a
    在最后等于
    2

    要理解,您必须组合if条件

    如果((a=b>c?d:e)==e)a++

    首先有一个作业

    a=b>c?d:e

    它说:如果b>c,那么a=d,否则a=e

    在这种情况下,3>5为假,因此

    a=e所以a=1

    然后还有另一个评价

    如果(a==e)a++

    在这种情况下,a=e=1,所以它做a++->a=2


    我希望这有帮助;)

    首先,如果我们在代码执行后查看变量,看起来没有什么变化。但这是真的吗

    好的,LiHo已经展示了它的分解,以及它如何“翻译”成更易于阅读的代码,并且使用他的代码,应该很容易看到发生了什么。但只是为了好玩,让我们分解这个东西,并在给定的数字下运行它,好吗

    int a = 2, b = 3, c = 5, d = 4, e = 1;
    
    if ( (a = ( (b > c) ? d : e )) == e ) a++;
    
    其形式如下:

    if ((a = b > c ? d : e) == e) a++;
    
    查看,我们看到三元运算符(
    ?:
    )的等级高于
    =
    ,因此它将首先计算:

    (a = b > c ? d : e)
    
    这是一个美化的
    if
    语句:如果
    b
    大于
    c
    ,则返回
    d
    ,否则返回
    e
    。我们有
    b
    c
    的值,我们还知道
    3
    不大于
    5
    。因此,我们知道该语句将返回
    e

    现在,我们简化了我们的表达式:

    b > c ? d : e
    
    这是一项任务。它将
    a
    设置为等于
    e
    。现在,我们将退一步了解更多的背景:

    (a = e)
    
    这里发生的是,在执行操作
    (a=e)
    之后,它会返回一个结果。方便地说,该结果是赋值后
    a
    的值。因此,我们有:

    if((a = e) == e) a++;
    
    由于我们已将
    a
    设置为等于
    e
    (即等于
    1
    ),因此
    if
    将执行
    a++
    并将
    a
    1
    增加到
    2


    因此,虽然看起来什么也没发生,但实际上,我们做了很多工作。

    只是一个小小的吹毛求疵(因为您的逻辑实际上是正确的):赋值是第二位的-三元值是第一位求值的。谢谢您的澄清;)孩子,学习优先规则。研究它们。与他们融为一体。只有这样,你才能获得真正的启迪。
    (a = e)
    
    if((a = e) == e) a++;
    
    if(a == e) a++;