C++ 接受左值操作数的运算符的结果是表示该左值操作数的左值?
在阅读比亚恩的CPP书时,我遇到了这样一种说法:“在逻辑上可行的情况下,接受左值操作数的运算符的结果是表示该左值操作数的左值”,我真的无法理解它。以下是本声明中包含的示例:C++ 接受左值操作数的运算符的结果是表示该左值操作数的左值?,c++,rvalue,lvalue,C++,Rvalue,Lvalue,在阅读比亚恩的CPP书时,我遇到了这样一种说法:“在逻辑上可行的情况下,接受左值操作数的运算符的结果是表示该左值操作数的左值”,我真的无法理解它。以下是本声明中包含的示例: void f(整数x,整数y) { int j=x=y;//x=y的值是赋值后x的值 int∗ p=&++x;//p指向x int∗ q=&(x++);//错误:x++不是左值(它不是存储在x中的值) int∗ p2=&(x>y?x:y);//值较大的int的地址 int&r=(x x=y返回引用左侧操作数的左值 int*j
void f(整数x,整数y)
{
int j=x=y;//x=y的值是赋值后x的值
int∗ p=&++x;//p指向x
int∗ q=&(x++);//错误:x++不是左值(它不是存储在x中的值)
int∗ p2=&(x>y?x:y);//值较大的int的地址
int&r=(x
x=y
返回引用左侧操作数的左值
int*j=x=y
,这是错误的,因为操作数类型无效
但是,
int*j=&(x=y)
:
工作,因为x=y
返回l值,所以这归结为int*j=&x
(x的值是y)
同样,这个int&j=x=y
也可以工作
其他链接:
对于条件表达式:
x=y
返回引用左侧操作数的左值
int*j=x=y
,这是错误的,因为操作数类型无效
但是,
int*j=&(x=y)
:
工作,因为x=y
返回l值,所以这归结为int*j=&x
(x的值是y)
同样,这个int&j=x=y
也可以工作
其他链接:
对于条件表达式:x=y
的结果是一个lvaule,表示x
(其中包含y
中的值)x=y
是一个整数值,不能将其分配给指针,但int*i=&(x=y)
works@AlexLarionov如果赋值的结果是一个整数,那么指针赋值将不起作用,因为这需要一个lvaule。@RichardCriten我现在明白了我在措辞上的错误,thanksWell,结果是可以写int&j=x=y;
,所以看起来是的,=
操作符确实返回了一个lv赋值后表示x
的值!这样,语句本身就开始有意义了。是否有人想在此处发布答案,以便我将其作为正确答案?x=y
的结果是表示x
的lvaule(其中包含y
中的值)x=y
是一个整数值,不能将其分配给指针,但int*i=&(x=y)
works@AlexLarionov如果赋值的结果是一个整数,那么指针赋值将不起作用,因为这需要一个lvaule。@RichardCriten我现在明白了我在措辞上的错误,thanksWell,结果是可以写int&j=x=y;
,所以看起来是的,=
操作符确实返回了一个lv赋值后表示x
的值!有了这个值,语句本身就开始有意义了。是否有人想在这里发布一个答案,以便我将其作为正确答案?