C++非const引用问题:error: cannot bind non-const lvalue reference of type

2023-10-29

    当一个函数的形参为非const类型,而一个参数以非const传入,编译器一般会认为程序员会在该函数里修改该参数,而且该参数返回后还会发挥作用。此时如果你把一个临时变量当成非const引用传进来,由于临时变量的特殊性,程序员无法对改临时变量进行操作,同时临时变量可能随时会消失,修改临时变量也毫无意义,因此,临时变量不能作为非const引用。

例如++++i与i++++的区别,前者是合法的,后者是非法的;原因在于前者是i自增后再参与其他预算,而后者是i参与运算后对i的值(临时变量)再自增1,即i++++让第一个后++返回的临时对象再自增,这样对C++是无意义的,同样也是禁止的。

例子:

std::string a[10]={
        "hello",
        "world",
        "shenzhen"
};
void print(const std::string& str){
        std::cout << str << std::endl;
}
std::string get_string(int i){
        return a[i];
}
int main(){
        print(get_string(1));
        return 0;
}

以上例子编译会提示错误:

error: cannot bind non-const lvalue reference of type

因为get_string(1)返回的是临时对象(属于const),而void print(std::string& str)要求接收非const引用,因此会报错,解决办法有多种:

  1. print(std::string& str)改成print(const std::string& str);
  2. print(std::string& str)改成print(std::string str);
  3. 先定义一个变量对象用于接收get_string(1)的返回值,再传给print(std::string& str);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++非const引用问题:error: cannot bind non-const lvalue reference of type 的相关文章

  • 【MySQL】 MySQL 导出数据库

    1 概述 转载 MySQL 导出数据库 仅供自己学习 这篇文章有趣 我看的是A文章 然后A转载的是B 然后B转载的是C 然后C转载的是D 我这里直接转载了D 主要是确实好用 在没有工具的情况下 MySQL备份和还原 都是利用mysqldum
  • golang怎么让string转int64

    在 Go 语言中 可以使用内置函数 strconv ParseInt 将字符串转为 int64 类型 具体用法如下 s 123456 i err strconv ParseInt s 10 64 if err nil 可能字符串 s 不是合
  • 剑指Offer - 面试题12:矩阵中的路径

    题目 请设计一个函数 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径 路径可以从矩阵中的任意一格开始 每一步可以在矩阵总向左 右 上 下移动一格 如果一条路径经过了矩阵的某一格 那么该路径不能再次进入该格子 如 在下面的3 4的
  • 增量式PID vs 位置式PID: 选择最佳的PID控制策略

    增量式PID和位置式PID是两种常见的PID控制器实现方法 它们之间的区别主要在于反馈信号的处理方式和输出计算方式 反馈信号处理方式 增量式PID 增量式PID控制器使用系统输出值与前一时刻的输出值之差作为反馈信号 它将当前的误差值与前一时
  • 第五篇 如何调用驱动接口,完成互操作

    1 如何调用驱动功能 1 编写调用驱动的应用程序 1 1 定义驱动设备接口 以及调用接口的控制码 例如 DEFINE GUID GUID DEVINTERFACE SampleDriver 0xc459a9ec 0xb463 0x4838
  • Keras标准的模型训练、验证以及评估测试

    from keras models import Model Sequential from keras layers import Input Conv2D GlobalAveragePooling2D Dropout Dense Fla
  • 车祸现场~线上突然宕机,一条订单消息丢失了...

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 写在前面 之前写过一篇文章 RabbitMQ是如何收发消息的 通俗易懂 我们用一个简单易懂的电商场景给大家引入说明了一个消息中间件的使用场景 同时 我们还基于Ra
  • idea项目中的idea文件如何隐藏,以及不小心隐藏之后如何显示idea文件夹

    由于我们写项目时 发现了idea文件夹有时需要隐藏 或者隐藏后无法显示 接下来我就告诉你们 打开file settings editor gt file types 选择 gitignore 再那一栏的后面输入 idea 点击应用 点击ok
  • NoSQL 概念

    http www infoq com cn news 2011 01 nosql why 写道
  • shell中的变量

    变量 shell中预设的变量都是大写的 变量就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据 可以使用echo命令显示变量的值 echo PWD echo PATH 另外可以使用env命令列出全部系统预设的系统环境变量 不同登
  • 华为云云耀云服务器L实例评测|深度体验云耀云服务器购买和Ubuntu环境性能压力评测

    文章目录 步骤一 云耀云服务器L实例配置选型 步骤二 购买云耀云服务器L实例 购买关键须知 购买流程体验 步骤三 轻松上手远程登录云耀云服务器L实例 步骤四 对云耀云服务器L实例进行压力测试 第一项测试 CPU压力测试 第三项测试 云耀云服
  • redis根据指定端口号方式访问redis服务端!

    以默认的方式进入 端口号 6379 指定端口号进入客户端 端口号 6378 此服务器安装了两个redis服务端 害老子去一个没存数据的redis服务器里刷缓存
  • PandoraBox版本及已安装软件包

    主机名 PandoraBox 7FBB 型号 Netgear R6220 固件版本 PandoraBox 19 02 2019 02 01 git 93f2639a7 LuCI Master git 19 026 77036 498ca21
  • ThinkPHP实现凯撒密码加密和解密

    ThinkPHP实现凯撒密码加密和解密 在密码学中 恺撒密码 英语 Caesar cipher 或称恺撒加密 恺撒变换 变换加密 是一种最简单且最广为人知的加密技术 它是一种替换加密的技术 明文中的所有字母都在字母表上向后 或向前 按照一个
  • CSS 类选择器的特殊使用-多类名

    title CSS 类选择器的特殊使用 多类名 CSS 类选择器的特殊使用 多类名概念 一个标签有多个名字 多类名的使用方式 示例代码
  • 在NW.js里面使用node-printer

    0 写在前面的一些提示 不要使用太高版本的 NW js 以及 Node js 因为 node printer 会有兼容性问题 目前笔者测试到 node printer 最高只能在 0 43 x 版本以及低于这个版本的 NW js 里面正常运
  • 代码走查与代码审查区别

    代码走查 程序员和测试员组成审查小组 通过逻辑运行程序 第一步 小组成员提前阅读设计规格书 程序文本等相关文档 第二步 利用测试用例 使程序逻辑运行 记录程序的踪迹 发现 讨论 解决问题 代码审查 程序员和测试员组成审查小组 第一步 小组成
  • robot通过一个元素定位另一个元素

    xpath定位 xpath span text 文章评为精华 div div span text 去完成
  • 一些keil编程错误总结

    一 error c267 delay 10us requires ANSI style prototype问题 解决方法 1 未进行 模块化程序设计时 delay 10us该子函数要在主函数前 2 在进行 模块化程序设计时 这是由于 c文件

随机推荐

  • 区块链在非金融领域有哪些值得期待的应用

    引言 自己关注区块链好多年了 感觉大部分人都在炒币 或者所谓的搞金融 但是现在各国的审查都越来越严格 针对金融领域的审查尤其严格 在国内 基本上是禁止区块链应用有任何的发币行为的 我个人也是觉得金融领域的监管太多 反而不容易落地 这篇文章来
  • Redis中的String类型与List类型个人理解

    String类型 String类型是Redis的最基础类型 最大能存储512MB 其中存储值可以是最简单的字符串 复杂的 xml json的字符串 二进制图像或者音频的字符串 以及是数字的字符串 String数据类型与结构 基本操作 set
  • R语言的plyr包简介

    转载地址 http www jianshu com p bfddfe29aa39 R语言的plyr包简介 字数3040 阅读2875 评论3 喜欢7 R语言中的类SQL操作 plyr包可以进行类似于数据透视表的操作 将数据分割成更小的数据
  • Eclipse启动tomcat出现invalid ports的解决办法

    在Eclipse出现以上错误的 可以继续往下看 在server中 点击Tomcat 进入设置 把三个端口都填写了不留空 根据情况来填写相应的端口号 防止占用 保存即可
  • 交易流水指标统计——pandas

    1 根据交易流水 计算每个交易交易对象的如下指标 总收入笔数 总收入月数 最大月收入笔数 最大月收入笔数所在日期 年月日格式 import pandas as pd path r C Users xxx Desktop 科技数据 xlsx
  • Angular入门学习笔记

    Angualr入门扫盲必备 声明 这篇是我学习angualr的笔记 可以转载 但必须注明来源作者 kone 并附上本文链接 A 环境 工具 1 先确保安装了nodejs和npm Nodejs npm 包管理器 cnpm 淘宝的镜像 2 安裝
  • 低代码让开发变得不再复杂

    传统IT自研软件开发 通过编程去写代码 还有数据库 API 第三方基础架构等 从而造成开发周期长 难度大 技术人员不易于开发维护 因此价格及时间成本也是相对较高 后期出现了可以直接应用的成品软件 以及现在火热的低代码开发方式 针对这三种方式
  • 给Sqlite数据库设置密码

    免费版Sqlie是不提供设置密码功能的 经过查阅资料最终找到了解决方案 方案一 从sqlite源码入手 据说sqlite源码已经提供了加密的接口 只是免费版没有实现 可以参考这位仁兄的博客以了解详情 http www cnblogs com
  • 架构师是做什么的?

    哈佛大学有一个非常著名的关于目标对人生影响的跟踪调查 调查的对象是一群智力 学历 环境等条件都差不多的大学毕业生 结果是这样的 第一类人 27 的人 没有目标 第二类人 60 的人 目标模糊 第三类人 10 的人 有清晰但比较短期的目标 第
  • Mysql错误1452 - Cannot add or update a child row: a foreign key constraint fails 原因及解决方法

    报错的原因大概分为三种 原因一 添加的外键列与另一个表的唯一索引列 一般是主键 的数据类型不同 原因二 要添加外键的表类型与另一个表的存储引擎是不是都为innodb引擎 查看表引擎 法一 show create table 表名 法二 sh
  • ag-grid在Vue项目中的基本使用

    ag grid官网 1 安装 npm install ag grid community ag grid vue save dev 2 在main js中引入ag grid的样式文件 引入ag grid的样式文件 import node m
  • bing搜索引擎入口_资源搜索,除了百度,还有哪些好用的搜索引擎?

    作者 杨银洁 来源 ETPPT 遇到问题怎么办 百度一下 你out了 除了百度还有很多搜索引擎 而且还有很多国外网站可以检索哦 是否还在苦恼高清图找不到 PPT素材找不到 关注ETPPT这些就不是问题 今天我们就介绍一下有哪些可以轻松帮助你
  • 云原生之使用Docker部署BookBrowser电子书浏览器

    云原生之使用Docker部署BookBrowser电子书浏览器 一 BookBrowser简介 1 BookBrowser简介 2 BookBrowser特点 二 检查docker环境 1 检查docker状态 2 检查docker版本 3
  • Java线程和操作系统线程的关系

    传统进程的缺点 fork一个子进程的消耗是很大的 fork是一个昂贵的系统调用 即使使用现代的写时复制 copy on write 技术 各个进程拥有自己独立的地址空间 进程间的协作需要复杂的IPC技术 如消息传递和共享内存等 多线程的优缺
  • 【C++从入门到放弃】C++编译生成动态链接库*.so及如何调用*.so进阶篇2-编译jsoncpp

    C 从入门到放弃 C 编译生成动态链接库 so及如何调用 so进阶篇2 编译jsoncpp 附 当前项目cstudy7 本文可以收获什么 将其它项目生成的动态链接库拿到本项目中使用 CMakeLists txt中使用其它项目的动态链接库 M
  • 记录开发中使用的设计模式之发布订阅者模式(观察者模式)

    一 开发场景 当我们在开发中涉及到大量的调用跨应用API的时候 需要按照场景书写大量的重复性代码 常规的做法就是通过if else进行场景判断 进行调用 代码十分的冗余 重复性的调用方法 不利于后期的维护 而为了更好的针对某些场景 去调用对
  • 在umi+dva中使用useDispatch、useSelector替代dva中的connect

    文章目录 前言 一 View和Model的关系图解 二 model的使用 三 connect的替代 四 umi dva的CURD应用 总结 前言 最近实习的公司用到了umi框架开发 里面有一个umi dva的使用 因此特地先看了dva的官方
  • FreeRTOS内核配置说明---FreeRTOS Kernel V10.2.1

    FreeRTOS内核是高度可定制的 使用配置文件FreeRTOSConfig h进行定制 每个FreeRTOS应用都必须包含这个头文件 用户根据实际应用来裁剪定制FreeRTOS内核 这个配置文件是针对用户程序的 而非内核 因此配置文件一般
  • 链栈的基本操作C/C++代码实现

    链栈的结构 由于栈的主要操作是在栈顶插入和删除 显然以链表的头部作为栈顶是最方便的 且不需要附加一个头结点 初始化 栈顶指针S置空即可 入栈 链栈不需要判断栈是否满 出栈 栈顶指针S等于NULL表空栈 即链栈S NULL时为空栈 代码如下
  • C++非const引用问题:error: cannot bind non-const lvalue reference of type

    当一个函数的形参为非const类型 而一个参数以非const传入 编译器一般会认为程序员会在该函数里修改该参数 而且该参数返回后还会发挥作用 此时如果你把一个临时变量当成非const引用传进来 由于临时变量的特殊性 程序员无法对改临时变量进