小精灵的故事在线听:关于C++中的左值

来源:百度文库 编辑:高校问答 时间:2024/05/06 02:54:47
下列关于左值的说法中错误的是()
A,在程序中左值可以被用户访问和修改
B,赋值和复合赋值运算符的左运算分量必须是左值
C,字面常量的值不能被用户修改,因此字面常量是左值
D,变量在内存中有不对应的存储单元,因此变量是左值

注:题提供的答案是C.但是我觉的B好像也不对.例如:int &t=a;这里的t不是左值吧.我说的对吗?
暗夜经典,我没有写错.int &t=a;这里的t是对变量a的引用.

请看这个程序:
#include<iostream.h>
main()
{
int a;
int &t=a ;
t=1;
cout<<t<<endl;
}
t 可以被用户访问和修改,是左值.
另外,int &t=a 是赋值语句吗? 是声明吧!

左值指的是在当前区域下用户具有访问和修改权限的一个内存地址对应的标识符.

楼主可能写错了,不可以这样int &t =a;
您的意思可能是int *t =a;
t是一个指针,但是t本身并未改变,改变的是t所指的内存地址,所以t不算一个左值,您的意思是这样,对吧?

实际上,这里=操作符的左运算分量是*t而不是t,在这里*t仍然是一个左值,虽然t不是.*t是t所指的内容,它确实是左值,符合左值的定义,所以B并没有错,答案选C没问题的

是C,没有错的.
t是一个int型的引用,是可以被用户访问的,是左值.
int &t=a;是给t初始化.

这好比
const int a=3;
a是不可修改的,但是必须初始化.

字面常量的值不能被用户修改,因此字面常量必须是 右值
int &t=a;这里的t是左值的
在左边吗
它可以 被修改的 t 也可以应用 别的变量的