当前位置: 首页 > article >正文

C++左值和右值

C++中的左值和右值_c++左值和右值-CSDN博客

左值:程序可以获取其地址,可以通过地址访问它们,是可被引用的数据对象。

可修改的左值:

    int m;
    cout << &m;

不可修改的左值。

如const变量:可以取地址,但不可对其赋值。

    const int m = 5;
    cout << &m;

左值指表达式结束后仍然存在的持久对象。

右值是指表达式结束时就不再存在的临时对象。

一个区分左值和右值的便捷方法是:看能不能对表达式取地址。

class IntClass {
private:
	int x;
public:
	IntClass(int value) :x(value) {}
};


cout << &IntClass(6);

所有具名对象或变量都是左值,而右值不具名。

上面的例子验证了这句话。 

通过排他性定义的话,每个表达式不是左值就是右值。

 C++11中,右值有两个概念组成:

一个是将亡值:

与右值引用相关的表达式。

比如:

将要被移动的对象

一个是纯右值:

包括:

非引用返回的临时变量

这是什么?

int test()
{
	return 10;
}
int main(int argc, char* argv[]) {
	&test();
}

运算表达式产生的临时变量

    &(1 + 2);

我自己理解的话:这样应该也会产生临时变量吧

    int a = 1;
    int b = 2;
    &(a + b);

原始字面量

 

字面量本身是不可寻址的。

lambda表达式.


http://www.kler.cn/news/361513.html

相关文章:

  • mysql数据量分库分表
  • 黑盒测试和白盒测试的具体方法(附加实际应用中的技巧和注意事项)
  • python-docx -- 对比两个表格的行数据
  • Python|基于Kimi大模型,实现上传文档并进行“多轮”对话(7)
  • LeetCode第101题. 对称二叉树
  • 【Python数据库操作】使用SQLite和MySQL进行数据存储和查询!
  • C# 里接口(Interface)应用说明
  • 服务器文件夹挂载到客户端
  • 修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)
  • Vue3 学习笔记(三)Vue3 项目打包及目录结构说明
  • TCP传输机制探索:滑动窗口,流量控制、拥塞管理、快重传、延迟应答详解
  • 【汇编语言】第一个程序(一)—— 一个源程序从写出到执行的过程
  • C# Linq常用方法
  • CSS3 动画相关属性实例大全(四)(font、height、left、letter-spacing、line-height 属性)
  • Web Service
  • 【力扣刷题实战】用队列实现栈
  • Vue3集成axios实现ajax请求
  • linux—基础命令及相关知识
  • Mysql同步数据库异常
  • 使用InternVL、LMDeploy和GTE搭建多模态RAG系统
  • 界面耻辱纪念堂--可视元素03
  • Python 曲线绘制
  • C++ 红黑树
  • 鸿蒙--页面跳转
  • 【鸿蒙NEXT】SaveButton保存图片
  • 无需扩散,下一个token预测直达AGI!