条件运算符语法
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 = max
或 max = min
是可能发生的两个赋值,并且都是使用左值的赋值。
表达式:
max = (max > min) ? max : min;
可以分解为:
if (max > min) {
max = max;
} else {
max = min;
}
因此,发生的事情是 max
与 min
进行比较,并且 大于 的另一个被分配给 max
。最后一个操作,在max
大于min
的情况下,称为自赋值:
max = max;
这是一个完全合法的操作,符合标准。
看了一整天的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 = max
或 max = min
是可能发生的两个赋值,并且都是使用左值的赋值。
表达式:
max = (max > min) ? max : min;
可以分解为:
if (max > min) {
max = max;
} else {
max = min;
}
因此,发生的事情是 max
与 min
进行比较,并且 大于 的另一个被分配给 max
。最后一个操作,在max
大于min
的情况下,称为自赋值:
max = max;
这是一个完全合法的操作,符合标准。