我一直在阅读C ++ Primer一整天,并坚持使用我意外输入的这段代码:
int max = 5, min = 4;
max = (max > min) ? max : min;
我认为它是max = max;
。
根据我的理解,右侧max
成为 rvalue ,因此它只是一个值5
。我根本不确定......
任何人都可以用简单的语言向我解释这个语法是什么?
作为一个新手我觉得我无法理解太复杂的答案 非常感谢提前!
答案 0 :(得分:2)
表达式
没什么奇怪的max = max;
因为没有要求右侧必须是一个右值,它恰好恰好是一个右值。
例如,这是从一个左值到另一个左右的典型副本
int x = 5;
int y;
y = x;
在这种情况下,x
不是右值,但它出现在右侧。它只是用于复制 - 分配给y
。
因此,在您的三元表达式中,max = max
或max = min
是可能发生的两个赋值,并且都是使用左值的赋值。
答案 1 :(得分:0)
表达式:
max = (max > min) ? max : min;
可以分解为:
if (max > min) {
max = max;
} else {
max = min;
}
因此,将max
与min
进行比较,将大于的对象分配给max
。在max
大于min
的情况下,最后一项操作称为自我分配:
max = max;
这是完全合法的操作,符合标准。