C++ 左值和右值

标签 c++

好的,所以我一直在学习左值和右值 - 精通 C/C++ 的人可以告诉我我的想法是否正确吗?

考虑代码:

int i = 3;
int j = i;

这里我们有两个左值ij,当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/

相关文章:

c++ - #import 生成不正确的 TLH 文件

c++ - 编写置换函数

c++ - 如何区分数值的使用和 #define 与 Clang 的使用?

c++ - "Cannot convert parameter from ' [classname](_cdecl *)(void) ' to ' [classname] '"构造对象时出错

c++ - 用C++下载文件的最简单的库是什么

c++ - 检查 Visual Studio 2010 的 C++ 项目中的特定配置

c++ - 类型推导如何用于评估表达式?

c++ - CreateProcess 在 Windows7 64 位中失败,错误代码为 '740'

c++ - 为什么 std::forward 会丢弃 constexpr-ness?

c++ - 如何确保函数在 C/C++ 中返回一致的浮点值?