開發平台(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的,是嗎?
謝謝各位。