PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] function的传值&回传值副本问题
楼主:
anoymouse
(没有暱称)
2014-12-02 02:20:49
当传值进去function的时候 此值会产生一个暂时的副本 函式的回传值也会产生一个
暂时的副本 。
比如说 int x=5;
int ref=function(x);
int function (int y)
{
int s;
s=y+1;
return s;
}
请问这副本是说内存有一个未命名空间(姑且称呼为#)
1.传进函式的时候 x把值给# #在给y 回传的时候 s把值给# #在给ref
还是
2.传进函式的时候 x把值给y 回传的时候 s把值给ref 不需要什么中间人#
我一直在想 x把值复制给y 也就是现在主副程式存在两个一样的值但位址不一样
那这样是否可称呼 y就是这所谓的副本?
直到y做完函式要它作的计算 s=y+1 s把值传回给ref s就是所谓的副本?
所以是1对 2对 还是都不对? 我觉得是1 可能是堆叠什么的原理
作者:
LPH66
(-6.2598534e+18f)
2014-12-02 03:20:00
我认为都对, 两种状况都会出现不过对呼叫方跟被呼叫方来说两者没有差别就是了所以编译器会选适合的时候使用适合的策略事实上对 C++ 的物件传值的话, 语意上传进是 2, 传出是 1而实际上传出时会不会真用 1 这样传则不一定这有个关键字叫“Return Value Optimization”
作者:
littleshan
(我要加入剑道社!)
2014-12-02 10:58:00
只要达到call by value的效果 (函式内改变不影响原值)compiler可以采用任何方法去做目前常见的做法是LPH66所说的那样但也可能直接用register传参数以提高传递效率除非你自己要做compiler或是写很底层的东西不然其实不需要去管compiler怎么帮你做
作者:
azureblaze
(AzureBlaze)
2014-12-02 11:33:00
"Copy elision"
楼主:
anoymouse
(没有暱称)
2014-12-02 12:49:00
好吧 我先查查你们说的关键字 谢谢!
作者:
Killercat
(杀人猫™)
2014-12-02 15:57:00
其实写个小程式 g++ -S就知道了... 不过上面大家说得对这东西并没有定义要怎么实作#1JeAUWnb 里面有提到一部分你讲的东西
继续阅读
Re: [讨论] 2维阵列 使用循环的方式
Killercat
[问题] FFTW link error
viaair
[讨论] 2维阵列 使用循环的方式
dragon229
Re: [问题] 关于static用法
wenyonba
[问题] 关于static用法
wandering25
[讨论] WinIO 32bit在OS:64bit下执行方法
srxrrr
Re: [问题] c++掷骰子题目 赌香肠
bwzhan
[问题] 2D阵列传值
future314
[问题] c++掷骰子题目 赌香肠
sone90935
[问题] iterator的作用是什么?
Lepton
Links
booklink
Contact Us: admin [ a t ] ucptt.com