为什么通过对象传值调用函数时会产生临时对象?
我们先不说编译器优化这样的话题,还有就是哪些情况下会产生临时对象,这个在网上也是一搜一大把的,不需要再解释了。
我就是想问问为什么编译器设计师一定要加个临时变量过渡进去?比如:调用函数fun(x),就不能直接把x赋值给形参吗?
如果从编译器设计人员的角度思考,我自己想了几个原因,大家能否帮忙分析一下?
一、传参时要调用形参的拷贝构造函数,而这时形参还未定义
二、父子函数间不能跨函数操作,但是编译器通过临时变量修改成引用传入,也算跨函数操作呀
三、因为寄存器太少,只能传地址,所以编译器通过建立临时对象传递引用。
不知道各位大侠是否有些自己的看法?给个指引?
我就是想问问为什么编译器设计师一定要加个临时变量过渡进去?比如:调用函数fun(x),就不能直接把x赋值给形参吗?
如果从编译器设计人员的角度思考,我自己想了几个原因,大家能否帮忙分析一下?
一、传参时要调用形参的拷贝构造函数,而这时形参还未定义
二、父子函数间不能跨函数操作,但是编译器通过临时变量修改成引用传入,也算跨函数操作呀
三、因为寄存器太少,只能传地址,所以编译器通过建立临时对象传递引用。
不知道各位大侠是否有些自己的看法?给个指引?
...全文
相关推荐
c++禁止函数的传值调用的方法
代码编译运行环境:VS2017+Debug+Win32 按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。 传值调用与后面两者的区别在于传值调用在进入函数体之前,会在栈上建立一个实参的副本,而引用和指针调用没有这个动作。建立副本的操作是利用拷贝构造函数进行的。因此,要禁止传值调用,就必须在类的拷贝构造函数上做文章。 可以直接在拷贝构造函数中抛出异常,这样就迫使程序员不能使用拷贝构造函数
C++传值调用与引用调用区别实例代码
C++ comparing call_by_value(传值调用) and call_by_reference(引用调用)
传值调用 传值调用 传值调用
传值调用 传值调用 传值调用传值调用 传值调用 传值调用
对Java中传值调用的理解分析
主要介绍了对Java中传值调用的理解分析,通过分析对比,较为深入的分析了Java中传值调用的原理与用法,需要的朋友可以参考下
Flex中函数传值调用Demo
NULL 博文链接:https://zys08.iteye.com/blog/1982233


