好的,所以我一直在学习左值和右值 - 精通 C/C++ 的人可以告诉我我的想法是否正确吗?
考虑代码:
int i = 3;
int j = i;
这里我们有两个左值i
和j
,当i
被赋值给j
时,它就变成了一个隐含的右值,因为 i
的拷贝存储在 j
中。但是,如果代码看起来像:
int i = 3;
int j = &i;
j
和&i
是否都是左值,因为它们都是内存中的物理地址?我的理解是右值是临时数据,而左值有一个物理/可引用的内存地址。
任何对此的澄清都会很棒!
最佳答案
变量i
永远是一个左值。如果您可以将地址运算符应用于某物(就像您在第二个示例中所做的那样),那么它就是一个左值。
同样在第二个例子中,&i
是指向i
的指针,类型为int*
。 j
的声明与您要初始化它的值之间存在类型不匹配。
最后,虽然 i
本身是一个左值,但表达式 &i
不是一个左值,因为你不能应用地址-对它的运算符(即你不能做 &&i
)。
关于C++ 左值和右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39486776/