条件运算符语法

时间:2015-12-29 12:57:30

标签: c++ conditional conditional-operator

我一直在阅读C ++ Primer一整天,并坚持使用我意外输入的这段代码:

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

我认为它是max = max;

根据我的理解,右侧max成为 rvalue ,因此它只是一个值5。我根本不确定......

任何人都可以用简单的语言向我解释这个语法是什么?

作为一个新手我觉得我无法理解太复杂的答案 非常感谢提前!

2 个答案:

答案 0 :(得分:2)

表达式

没什么奇怪的
max = max;

因为没有要求右侧必须是一个右值,它恰好恰好是一个右值。

例如,这是从一个左值到另一个左右的典型副本

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

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

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

答案 1 :(得分:0)

表达式:

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

可以分解为:

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

因此,将maxmin进行比较,将大于的对象分配给max。在max大于min的情况下,最后一项操作称为自我分配:

max = max;

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