【问题标题】:Conditional operator syntax条件运算符语法
【发布时间】:2016-04-03 08:50:20
【问题描述】:

我已经读了一整天的 C++ Primer 并且卡在了这段我不小心输入的代码:

int max = 5, min = 4;
max = (max > min) ? max : min;

把它想象成max = max;,对我来说变得如此紧密。

根据我的理解,右侧max 变成了一个右值,所以它只是一个值5。我完全不确定...

谁能用简单的语言向我解释一下这个语法是什么?

作为一个新手,我想我无法理解太复杂的答案。
非常感谢!

【问题讨论】:

  • maxmin 只是变量。如果您愿意,您也可以更改它们的名称或交换它们的值。
  • 有点奇怪的代码,我会写if (min > max) max = min;
  • @LightnessRacesinOrbit 其实我已经自学 C++ 大约 3 周了,每天从早上 7 点开始到晚上 11 点,只有 C++...LOL..我要和 CS 学生一起学习 C++ 课程下一个暑假。这就是为什么我必须在这个假期学习更多。
  • 六个月后回来:)
  • @LightnessRacesinOrbit !!!:-)

标签: c++ conditional conditional-operator


【解决方案1】:

表达方式没有什么奇怪的

max = max;

因为没有要求右侧必须是右值,所以它经常是右值。

例如,这是从一个左值到另一个左值的典型复制

int x = 5;
int y;
y = x;

在这种情况下,x 不是右值,但它出现在右侧。它只是用来复制分配给y

因此,在您的三元表达式中,max = maxmax = min 是可能发生的两个赋值,并且都是使用左值的赋值。

【讨论】:

  • 点赞!感谢您的努力!我很抱歉,但我想我更理解他的回答。对不起!
【解决方案2】:

表达式:

max = (max > min) ? max : min;

可以分解为:

if (max > min) {
    max = max;
} else {
    max = min;
}

因此,所发生的事情是将maxmin 进行比较,并且大于另一个被分配给max。最后一个操作,在max大于min的情况下,称为自赋值:

max = max;

这是完全合法的操作,符合标准。

【讨论】:

  • 感谢您的努力,“被称为自我分配”清楚地解释了我的问题。我稍后会接受你的回答。
  • 很高兴能帮上忙!
猜你喜欢
  • 2014-03-08
  • 2011-06-04
  • 2015-11-07
  • 2020-08-19
  • 2011-02-18
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多