开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
None
问题(Question):
请问物件、结构等复合型态,可否call by value?
我知道这问题可能很基本,但我问了朋友跟同事,没有人能给我一个肯定的答案,
所以还是厚著脸皮上来请教各位先进了。
因工作关系开始写MFC,开始学着C++的物件怎么用。
但我一直疑惑著,复合型态是否真的无法使用call by value呢?
我知道像是阵列、结构、物件这种复合型态,一般来说都call by pointer/reference。
而复合型态的名称,等同于它在内存里面的起使位置。
那么,如果我碰到底下这种状况
"在function call产生的复合型态物件,要回传到主程式中"
此时我不能用call by pointer/reference,
因为程式一离开function,产生的物件就消失了。
所以我猜想是否能写成改为call by value,像底下这样...
class CA;
int main()
{
CA obj_A = fun1();
...
}
CA fun1()
{
CA fun_obj = ...
return fun_obj;
}
我使用VC2008测试结果是可以的,结果正确。
那么,complier是否在return物件时,把fun_obj的内容,完全拷贝给obj_A?
所以实际上,复合物件也是可以call by value?
当然我也想的到像这种情况,另一个作法是,先在main里面把obj_A宣告,
然后用call by reference传给fun1(),
使得fun1()直接将运算结果写在obj_A的位址,改成像这样...
class CA;
int main()
{
CA obj_A;
fun1(obj_A);
...
}
void fun1(CA& fun_obj)
{
fun_obj=...
}
但我想弄清楚,复合型态物件,其实是可以call by value的,是吗?
谢谢各位。