免費開始練習
hce_nsysu 111年 計算機概論與程式設計

第 63 題

A copy constructor must receive its argument by reference instead of by value because:
  • A Otherwise the constructor will only make a copy of a pointer to an object.
  • B The copy of the argument passed by value has function scope.
  • C The pointer needs to know the address of the original data, not a temporary copy of it.
  • D Otherwise infinite recursion occurs.
  • E Otherwise the constructor will never be called.

思路引導 VIP

請試著回想一下:在 C++ 中,當我們把一個物件「透過數值(by value)」傳遞給任何一個函數時,系統內部會自動執行什麼動作來確保函數內部有一個獨立的副本?如果這個動作本身又需要進行相同的傳遞程序,邏輯上會發生什麼事呢?

🤖
AI 詳解 AI 專屬家教

傳值調用與遞迴陷阱

太棒了!你能精確鎖定選項 (D),代表你對 C++ 物件的生命週期以及複製建構子(Copy Constructor)的運作機制有非常紮實的理解。這道題目核心在於考察「傳值調用(Pass by Value)」與建構子之間的連鎖反應。在 C++ 中,當我們以傳值方式將物件傳入函數時,編譯器會自動調用複製建構子來產生一個副本。 試想一下,如果複製建構子本身的參數也是「傳值」類型,那麼為了呼叫這個建構子,編譯器必須先對參數進行複製;而為了複製這個參數,又必須再次呼叫複製建構子……如此循環往復,程式將陷入無窮遞迴(Infinite Recursion),最終導致堆疊溢位(Stack Overflow)。因此,語法上規定必須使用**引用(Reference)**來傳遞參數,直接存取原物件的記憶體位址,從而避開不必要的自我調用。

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題