研一寒假C++复习笔记--左值和右值的理解和使用

2023-11-05

目录

1--左值和右值的定义

2--简单理解左值和右值的代码

3--非const引用只能接受左值


1--左值和右值的定义

左值:L-Value,L理解为 Location,表示可寻;

右值:R-Value,R理解为 Read,表示可读;

        左值和右值是相对于赋值表达式(=)而言的,左值可以出现在等号表达式的左边和右边,而右值只能出现在等号表达式的右边;

        左值可以理解为一个内存地址值,通过这个内存地址,用户可以进行读和写的操作;右值可以理解为一个真实数据值,只能进行读的操作;简单理解左值为地址值,右值为数据值,即右值指的是引用了一个存储在某个内存地址的数据

        一个简单区分左值和右值的方法是,如果可以利用 & 符号对表达式取地址,则为左值,反之为右值;

2--简单理解左值和右值的代码

int a, b;
b = 0;
a = b;

        赋值表达式 b = 0 可以理解为:取 b 的左值,即 b 对应的内存地址值;取 0 的右值,即数值0;

        赋值表达式 a = b 可以理解为:取 a 的左值,取 b 的右值,本质上 b 还是一个左值;

3--非const引用只能接受左值

# include <iostream>
 
int func(){
    int i = 1;
    std::cout << "func()" << std::endl;
    return i;
} 
int main(){
    int i = 1;
    const int& i_cref1 = i;  // 正确
    const int& i_cref2 = func(); // 正确

    int& i_ref1 = i; // 正确,这里 i 是一个左值

    // 非const引用只能接受左值,而func()返回的是一个右值
    int& i_ref2 = func(); // 错误 
}

        上面的代码中,int& i_ref2 = func(); 是错误的,因为 int& 是一个非const的引用,即非常量引用,只能接收左值;而函数 func() 返回的是一个右值;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

研一寒假C++复习笔记--左值和右值的理解和使用 的相关文章

  • 创建文件并使用内存流保存到其中

    如何创建文件并使用内存流写入文件 我需要使用内存流来防止其他线程尝试访问该文件 我试图保存到文件的数据是 html 如何才能做到这一点 假设您的意思是如何将文件的内容复制到内存流 如果您使用的是框架4 var memoryStream ne
  • Windows 窗体中的切换开关控件

    我正在设计一个拨动开关控制使用CheckBox 但目前我的控件只能画一个圆圈 如何绘制如下图所示的圆形形状 以及如何根据控件的值更改圆圈的位置以表示选中和未选中的状态 如下图所示 这是我的代码 public class MyCheckBox
  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • 合并多边形的高效算法

    我有一个多边形列表 在这个列表中 一些多边形重叠 或者接触其他多边形 我的任务是合并所有相互重叠或接触的多边形 我有一个union执行此操作的方法 做到这一点最有效的方法是什么 我目前能想到的是循环遍历多边形列表 检查合并列表以查看该多边形
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • FxCop 和 GAC 疯狂

    当我尝试分析依赖于模式和实践 企业库数据 以及其他 2 0 0 0 的项目时使用 FxCop FxCop 抱怨它不能 定位程序集引用 即使正在分析的应用程序 dll 是根据其编译的此版本及其在 GAC 中 如果我浏览到 GAC 尝试选择相同
  • 不使用 DAO 压缩 Microsoft Access 数据库

    我用CDatabase类开一个ACCDB访问数据库 司机是 T Microsoft Access Driver mdb accdb 我可以打开并使用数据库 已经这样做很多年了 if DatabaseExist m strMDBPath AJ
  • 安全移动 C++ 对象

    我听到过一些警告 不要通过以下方式将对象运送到另一个内存位置memcpy 但不知道具体原因 除非它包含的成员做了依赖于内存位置的棘手事情 否则这应该是完全安全的 或者不是 编辑 预期的用例是像这样的数据结构vector 它存储对象 不是po
  • 如何检查我的程序是否有数据通过管道传输到其中

    我正在编写一个应该通过标准输入读取输入的程序 所以我有以下结构 FILE fp stdin 但是 如果用户没有将任何内容通过管道传输到程序中 这就会挂起 我如何检查用户是否确实将数据通过管道传输到我的程序中 例如 gunzip c file
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • 在运行时生成可执行文件

    好吧 所以我想知道如何创建一个程序 该程序创建第二个程序 就像大多数压缩程序如何创建自解压自可执行文件一样 但这不是我需要的 假设我有 2 个程序 每个都包含一个类 我将使用一个程序来修改类并用数据填充类 第二个文件将是一个也具有该类的程序
  • 如何同时正确使用管道和信号?

    我有 2 个孩子 我想将信号从孩子发送到父母 并将答案 随机数 为什么 为什么不 命名管道从父母发送到每个孩子 我有这个代码 include
  • 如何使用 XmlSerializer 生成标记前缀

    我想使用 XmlSerializer 生成以下内容
  • 您可以从 AuthorizeAttribute 返回 HTTP 响应而不引发异常吗?

    我在各种控制器上使用 AuthorizeAttribute 可能需要根据请求本身的某些属性返回 403 或 429 请求过多 我完全在自定义 OnAuthorization 实现中实现了它 然后在必要时抛出一个带有适当响应代码的新 Http
  • TransactionScope 在某些机器上自动升级到 MSDTC?

    在我们的项目中 我们使用 TransactionScope 来确保我们的数据访问层在事务中执行其操作 我们的目标是not要求在我们的最终用户的计算机上启用 MSDTC 服务 问题是 在我们一半的开发人员机器上 我们可以在禁用 MSDTC 的
  • 编写一个转储屏幕像素的 RDP 客户端

    我想在中实现 RDP 客户端C 它能够获取屏幕所有像素的颜色值并将它们转储到文件中 我知道这在概念上与 RDP 的工作方式不同 但我的应用程序需要它 我正在尝试利用freerdp https github com FreeRDP FreeR
  • 阅读《Effective、MoreEffective 和Effective Modern C++(和 STL)》的首选顺序是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 据我所知 More effective C 是 Effective C 的扩展 而 Effective Modern C 则专注于 C 11 和

随机推荐

  • Flink从入门到放弃(九)-万字讲解CDC设计(1)

    一 准备工作 在开始研究Flink CDC原理之前 本篇先以CDC1 0版本介绍 后续会延伸介绍2 0的功能 需要做以下几个工作 本篇以Flink1 12环境开始着手 打开Flink官网 查看Connector模块介绍 打开Github 下
  • Unicode与JavaScript详解

    上个月 我做了一次分享 详细介绍了Unicode字符集 以及JavaScript语言对它的支持 下面就是这次分享的讲稿 一 Unicode是什么 Unicode源于一个很简单的想法 将全世界所有的字符包含在一个集合里 计算机只要支持这一个字
  • 水箱建模最小二乘法_Comsol Multiphysics for Mac(建模仿真软件)

    COMSOL Multiphysics 是一款全球通用的基于高级数值方法和模拟物理场问题的通用软件 拥有 网格划分 研究和优化 求解器 可视化和后处理 仿真 App等相关功能 轻松实现各个环节的流畅进行 它能够解释耦合或多物理现象 附加产品
  • oracle 19c rac asm磁盘绑定的方法

    multipath 通过scsi id udev 通过scsi id oracle AFD 直接绑定后在 dev oracleafd disks 下面生成设备文件 asmcmd afd label OCR1 dev sda init 虚拟机
  • 【华为OD机试真题 JAVA】数组二叉树

    JS版 华为OD机试真题 JS 数组二叉树 标题 数组二叉树 时间限制 1秒 内存限制 262144K 语言限制 不限 二叉树也可以用数组来存储 给定一个数组 树的根节点的值存储在下标1 对于存储在下标N的节点 它的左子节点和右子节点分别存
  • QT-自定义消息提示框,好看大气

    QT 自定义消息提示框 好看大气 前言 一 演示效果 二 关键程序 三 下载链接 前言 原生的QT提示框总是让人觉得难以接受 因此特定重新封装一个类来替换原生的 使用过程跟原生的一致 使用比较方便 一 演示效果 二 关键程序 include
  • PHP常见加密函数(总结)

    1 加密算法汇总 比较常用的算法 md5 加密 crypt 加密 sha1加密 URL编码加密 base64编码加密 信息加密技术分为三类 单项散列加密 对称散列加密 非对称散列加密 1 1单项散列加密 MD5加密 crypt 加密 sha
  • 数据结构——深度优先遍历(DFS)无向连通图

    以下是数据结构中关于深度优先遍历无向连通图的操作 编程风格参考严蔚敏版数据结构 其实深度优先遍历就是二叉树的先序遍历的推广 头文件以及宏定义 include
  • css渐变

    1 线性渐变 是从一个方向到另一个方向的渐变 属性值 background linear gradient 颜色 默认值 从上到下线性渐变 代码 结果 属性延伸 1 改变渐变方向 从下到上 background linear gradien
  • RecyclerView 网格布局是设置分割线

    1 分割线 public class DividerGridItemDecoration extends RecyclerView ItemDecoration private static final int ATTRS new int
  • 在用apt install中如何选择安装路径?

    apt install并不会选择软件包的安装路径 这个路径是在软件包里面记录好路径的相关信息的 一个deb包 只是一堆文件 文件夹的压缩包而已 而这个包里面记录了这些文件 文件夹应该安装的位置 因此 简单点说 你不能够在apt instal
  • 图解多态原理

    虚函数表 class Base public virtual void Func1 cout lt lt Func1 lt lt endl private int b 1 void test Base b cout lt
  • 空间(蓝桥杯)

    空间 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝准备用 256MB 的内存空间开一个数组 数组的每个元素都是 32 位 二进制整数 如果不考虑程序占用的空间和维护内存需要的辅助空间 请问 256MB 的空间
  • 定义内部类 继承 AsyncTask 来实现异步网络请求

    异步任务处理 创建内部类 来实现网络异步请求 新建内部类 继承 AsyncTask SuppressLint StaticFieldLeak class RequestNetworkDataTask extends AsyncTask
  • Docker、Portainer、K8S环境搭建

    Docker Portainer K8S环境搭建 安装Docker 安装步骤 安装依赖包 yum install y yum utils device mapper persistent data lvm2 配置阿里云yum源 以便加速下载
  • Vue 安装开发者工具

    1 下载开发者工具 下载地址 http book wiyp top App Vue3开发者工具 谷歌 Vue3 crx 2 打开谷歌浏览器 点击扩展 点击管理扩展程序 3 开启开发者模式 将 Vue3 开发者工具文件拖拽到浏览器中进行安装
  • 设计模式(十三)代理模式

    代理模式也是一种结构性模式 它的主要作用是创建一个现有对象的代理 以便我们能够针对对象的生命周期 访问权限等进行控制 代理模式和适配器模式的区别是 适配器模式主要用于现有接口和新接口之间的转换和衔接 而代理模式对现有接口进行控制 所以代理模
  • 【机器学习】PyTorch如何选择最优初始学习率

    众所周知 机器学习尤其是现在的深度学习 大量的工作都集中在调参上 一个模型能否很好的解决问题 调参占了很大的比重 而学习率又是模型众多超参数中最重要和最容易调节的一个 1 什么是学习率 目前深度学习优化的基本思想是梯度下降法 已经有很多优秀
  • Java DAO模式

    Java DAO模式 Data Access Objects 作用 隔离了数据库访问代码和业务逻辑代码 隔离了数据库连接代码 代码实现 DAO接口 DAO实现 实体类 连接数据库类和关闭数据库连接类
  • 研一寒假C++复习笔记--左值和右值的理解和使用

    目录 1 左值和右值的定义 2 简单理解左值和右值的代码 3 非const引用只能接受左值 1 左值和右值的定义 左值 L Value L理解为 Location 表示可寻 右值 R Value R理解为 Read 表示可读 左值和右值是相