作者LPH66 (凉宫春日症候群)
看板C_and_CPP
标题Re: [问题] 两个 C++ 指标 的问题
时间Fri Jul 28 20:01:49 2006
※ 引述《softwind (softwind rising)》之铭言:
: 说到这边 小弟也想请问一下
: 下面这些名词的说法或解释:
: 1. call by value
: 2. call by pointer
: 3. call by reference
: 4. call by name
: 上面这四项 有版上高手可以详细说明吗?
: 请说明一下用法 和C++内部的运作方式/实现方式
: 最好能有 书本或是杂志或是官方标准的参考
: 因为小弟被这几个相似的名词
: 搞的要解说的时候 都不太确定要用哪一个为准
: 谢谢
: ----------------------------------------------
: 我不会只有问 不会回PO
: 小弟想先听听看 其他人的说法
: 所以 晚点我再回PO 我的看法 THX...
最近因为某件事在念计概 有查了一下这些东西
(基本上是看
http://en.wikipedia.org/wiki/Evaluation_strategy这里的)
1. call by value
就是简单的把值丢过去
所以在函式里胡搞乱搞都不会影响外面给值传的变数
2. call by adderss (pointer?!)
在我的观念里这只是丢个指标过去的call by value
但通常会用来当作下一项call by reference的替代品(当不支援下一项时 例如C)
成为下一项的替代品时要多一层指标存取
3. call by reference
就是传过去的是它的reference
等於那个变数在函式里有个别名这样
因此在里面乱搞会影响外面传值的变数
和上一个不同的是 这个不用多一层指标存取
如果参数是运算式的话 (严格说应该是非左值)
则会建立一个暂时物件 然後传这个暂时物件的reference
函式结束後就把那暂时物件丢掉
然後听过一种说法是 内部其实是用传位址来实作的
4. call by name
(这是我看资料後才知道是什麽..)
完全不处理参数
在函式中直接把所传的参数原封不动代入
(也就是如果传入x+y 就会把x+y这式子代入)
(有点类似macro代入)
例如函式是f(x,y) 中间要算x=y
那如果传入a,a+1 算的那一行就会变成a=a+1
所以用它几次就会算几次 没用过就完全不会去动它
不过如果传入的式子不是左值却被放在等号左边会怎样就不知道了
C/C++好像没有这种呼叫法
--
有人喜欢边
玩游戏边
上逼;
也有人喜欢边
听歌边
打字。
但是,我有个请求,
选字的时候请
专心好吗?
-- 改编自「古 火田 任三郎」之开场白
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.84.44.21
1F:推 drkkimo:3607篇我有回答过喔 可以看一下:) 07/28 20:07
2F:推 FlyinDeath:看来call by name跟inline做的东西很像啊? 07/29 02:06