[問題] 物件可否call by value?
開發平台(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的,是嗎?
謝謝各位。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.213.130
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1403199795.A.FA6.html
推
06/20 01:44, , 1F
06/20 01:44, 1F
→
06/20 01:45, , 2F
06/20 01:45, 2F
→
06/20 01:45, , 3F
06/20 01:45, 3F
→
06/20 01:46, , 4F
06/20 01:46, 4F
→
06/20 01:47, , 5F
06/20 01:47, 5F
→
06/20 01:48, , 6F
06/20 01:48, 6F
推
06/20 01:50, , 7F
06/20 01:50, 7F
→
06/20 01:51, , 8F
06/20 01:51, 8F
推
06/20 02:06, , 9F
06/20 02:06, 9F
→
06/20 02:07, , 10F
06/20 02:07, 10F
推
06/20 09:28, , 11F
06/20 09:28, 11F
→
06/20 09:29, , 12F
06/20 09:29, 12F
→
06/20 09:29, , 13F
06/20 09:29, 13F
→
06/20 09:30, , 14F
06/20 09:30, 14F
→
06/20 09:30, , 15F
06/20 09:30, 15F
→
06/20 09:31, , 16F
06/20 09:31, 16F
→
06/20 09:32, , 17F
06/20 09:32, 17F
→
06/20 09:33, , 18F
06/20 09:33, 18F
→
06/20 09:34, , 19F
06/20 09:34, 19F
→
06/20 09:37, , 20F
06/20 09:37, 20F
→
06/20 10:38, , 21F
06/20 10:38, 21F
→
06/20 10:38, , 22F
06/20 10:38, 22F
→
06/20 10:39, , 23F
06/20 10:39, 23F
→
06/20 10:39, , 24F
06/20 10:39, 24F
謝謝各位!
我想的到不要用call by value的原因是效率問題,
但沒考量到如果物件裡面有指標,call by value確實可能有危險。
感謝各位高手的提點^^
※ 編輯: Keitaro (114.43.193.222), 06/24/2014 22:48:04
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章