条件运算符语法

Conditional operator syntax

看了一整天的C++ Primer,卡在了这段不小心打出来的代码:

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

我把它想象成 max = max;

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

任何人请用简单的语言向我解释一下这是什么语法?

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

表达式没有什么奇怪的

max = max;

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

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

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

在这种情况下 x 不是右值,但它出现在右侧。它只是用于copy-assign到y

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

表达式:

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

可以分解为:

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

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

max = max;

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