相关文章:

为什么常量左值引用可以绑定到右值?

根据该问题的几位答主的回答,整理成个人的理解。

从设计初衷上讲

允许引用绑定非左值的初衷在于“让传值还是传引用成为函数本身的细节,调用者不用去关心”,这一点,在const引用上可以达到,而非const引用,调用者无法不关心传值还是传引用,所以干脆在C++ 2.0禁止掉了。

如下示例,如果允许非常量左值引用绑定右值:ss类型与rr不同,rr引用无法直接绑定传递的参数ss,那么会生成一个用ss初始化的int型临时变量,然后非const引用rr绑定了该临时变量,之后修改了临时变量,而不会按预期修改ss。

硬性需求:支持Fortran

FORTRAN语言是Formula Translation的缩写,意为“公式翻译”。它是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。

从示例中可以看出,支持常量左值引用绑定右值非常有必要。

从汇编查看实现方法

从示例可以看出:当常量左值引用绑定右值时,编译器根据常亮左值引用的作用域,在栈或堆上新建临时变量,其生命周期与常量左值引用保持一致。那么倒推一下,因为常量左值引用不可修改的属性,允许其绑定匿名变量也是可以的。

常亮左值引用可以绑定右值的原因相关推荐

  1. 万能引用,引用折叠,右值变左值的情况

    文章目录 万能引用 引用折叠 右值变左值的情况 万能引用 左值引用只能引用左值,右值引用只能引用右值. 但是对于一个函数我们有时候并不清楚传入的参数是左值还是右值,这时候就需要写两个同名的函数重载,而 ...

  2. C++中左值(引用)及右值(引用)详解

    写C++代码编译时,有时会出现左值问题错误或右值错误,那左值和右值究竟是什么呢??? 一.左值与右值 啥是左值和右值呢? 左值:在内存有确定存储地址.有变量名,表达式结束依然存在的值,简单来说左值就是 ...

  3. Boost:bind绑定右值的测试程序

    Boost:bind绑定右值的测试程序 实现功能 C++实现代码 实现功能 boost::bind模块,bind绑定右值的测试程序 C++实现代码 #include <boost/config. ...

  4. C++右值引用与函数返回值

    大一的时候在matrix上打的一道题目, 出现了迷之BUG, 后来请教了助教, 是右值引用的问题. bool operator != (simple_iterator &a) {return ...

  5. C/C++左值性精髓(二)哪些表达式是左值,哪些是右值?----右值表达式

    2019独角兽企业重金招聘Python工程师标准>>> C对于右值的定义是表达式的值,C中所有完整表达式的结果都是右值.所谓完整表达式(full expression),指的是这样的 ...

  6. c++_函数返回值,引用作为函数返回值

    catalog 函数返回值 返回值是`[const] T &` 返回值的类型是 T 返回的对象是 局部对象 实现原理 返回的对象是 全局对象 实例 函数返回值 返回值是[const] T &a ...

  7. C++ 右值引用与左值引用

    意义:可以避免无谓的复制,提高程序的性能. 左值:表达式结束后依然存在的持久化对象 右值:表达式结束后不再存在的临时对象 所有的具名变量和对象都是左值,而右值不具名. 区分左值和右值的快捷方法: 看能 ...

  8. 右值引用 移动构造函数 移动语义

    一篇讲的很好的博客:https://www.jianshu.com/p/d19fc8447eaa 左值 右值: 看能不能对表达式取地址,如果能,则为左值,否则为右值. 将亡值和纯右值: 左值 右值: ...

  9. C++11右值引用、移动语义、完美转发详解

    c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能.有点难理解,于是花时间整理一下自己的理解. 左值.右值 C++中所有的值都必然属于左值.右值二者之一.左值是指表达式结束后依然存在的 ...

最新文章

  1. Kafka技术架构那些事儿
  2. 从PPT到Word,用Python轻松实现办公自动化
  3. arcgis 快速制图插件_51GIS学院|ArcGIS空间数据分析系列课程的27个视频
  4. dbcp、c3p0、proxool、Bonecp等连接池对比
  5. 面向对象和面向过程的区别个人觉得是目前解释最好的
  6. tomcat两个项目冲突
  7. 创建二级索引_Mysql创建索引
  8. [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?
  9. sql sever 2008基础知识
  10. Session监听器
  11. 【虚拟化实战】存储设计之二LUN Sizing
  12. UvaLive 6664 Clock Hands
  13. 在R中使用Primer3和NCBI-BLAST进行高通量引物设计
  14. 程序员职场背锅甩锅指南
  15. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G-旋转矩阵
  16. MCU实现低功耗注意事项
  17. 微信小程序————简易计算器
  18. sublime:下载免费历史版本
  19. 论 Erda 的安全之道
  20. 面试必问的8个CSS响应式单位,你知道几个?

热门文章

  1. 排序算法(01)— 三种简单排序(冒泡、插入、选择)
  2. [附源码]Python计算机毕业设计大学生体检管理系统Django(程序+LW)
  3. 操作系统之文件管理-翟一鸣-专题视频课程
  4. 字体包压缩-字体包抽取
  5. 泊松分布 指数分布
  6. 【实用教程】场景模式详细讲解
  7. 蒙特卡洛算法--概率论
  8. 波士顿动力机器人跑酷揭秘!不用动捕和特效,凭借感知适应做动作
  9. foreach - gt 写法java_java map在JSTL EL中的小应用--lt;c:forEachgt;遍历Maplt;gt;泛型
  10. LibGdx tmx地图加载步骤