很长一段时间以来,我一直认为三目运算符始终会返回一个rvalue。但令我惊讶的是它并不是这样。在下面的代码中,我看不出 foo
的返回值和三目运算符的返回值之间有什么区别。
#include <iostream>
int g = 20 ;
int foo()
{
return g ;
}
int main()
{
int i= 2,j =10 ;
foo()=10 ; // not Ok
((i < 3) ? i : j) = 7; //Ok
std::cout << i <<","<<j << "," <<g << std::endl ;
}
int foo()
改为int &foo()
,那么foo()=10;
也能够起作用。 - Blaze*((i<3) ? &i : &j) = 7;
,因此C++规则可以概括为“即使没有*&
也仍然有效”。 - MSalters