为什么通过对象传值调用函数时会产生临时对象?

srxumin srxumin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我们先不说编译器优化这样的话题,还有就是哪些情况下会产生临时对象,这个在网上也是一搜一大把的,不需要再解释了。
我就是想问问为什么编译器设计师一定要加个临时变量过渡进去?比如:调用函数fun(x),就不能直接把x赋值给形参吗?

如果从编译器设计人员的角度思考,我自己想了几个原因,大家能否帮忙分析一下?
一、传参时要调用形参的拷贝构造函数,而这时形参还未定义
二、父子函数间不能跨函数操作,但是编译器通过临时变量修改成引用传入,也算跨函数操作呀
三、因为寄存器太少,只能传地址,所以编译器通过建立临时对象传递引用。

不知道各位大侠是否有些自己的看法?给个指引?
...全文

相关推荐

c++禁止函数的传值调用的方法

代码编译运行环境:VS2017+Debug+Win32 按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。 传值调用与后面两者的区别在于传值调用在进入函数体之前,会在栈上建立一个实参的副本,而引用和指针调用没有这个动作。建立副本的操作是利用拷贝构造函数进行的。因此,要禁止传值调用,就必须在类的拷贝构造函数上做文章。 可以直接在拷贝构造函数中抛出异常,这样就迫使程序员不能使用拷贝构造函数

weixin_38660918

C++传值调用与引用调用区别实例代码

C++ comparing call_by_value(传值调用) and call_by_reference(引用调用)

zhyjtwgsnwxhn

传值调用 传值调用 传值调用

传值调用 传值调用 传值调用传值调用 传值调用 传值调用

SONYPS5201314

对Java中传值调用的理解分析

主要介绍了对Java中传值调用的理解分析,通过分析对比,较为深入的分析了Java中传值调用的原理与用法,需要的朋友可以参考下

weixin_38657102

Flex中函数传值调用Demo

NULL 博文链接:https://zys08.iteye.com/blog/1982233

weixin_38669628
评论 9
收藏 已收藏
分享
返回顶部
srxumin
C++ 语言 65,214 成员 250,514 内容