C 中拷貝建構函式的定義傳參問題

2021-09-25 00:23:16 字數 505 閱讀 2482

在c++中,我們使用拷貝建構函式來實現物件的複製。我們需要注意的是,在定義拷貝建構函式的時候,傳入引數不能是傳值引數,例如a(a other)。因為如果是傳值函式,就會在拷貝建構函式內將形參複製為實參,而複製的時候又會呼叫拷貝建構函式,這樣就會造成無休止的遞迴呼叫導致棧溢位,因此c++不允許拷貝建構函式傳遞值引數,最好將拷貝建構函式修改為傳遞常量引用。

例如:

#includeusing namespace std;

class a

a(a other)

void paint() };

int main()

這樣的拷貝建構函式是無法通過編譯的。

#includeusing namespace std;

class a

a(const a& other)

void paint() };

int main()

這才是正確的寫法。

c 拷貝建構函式引用傳參

看一道c 面試題 給出下述 分析編譯執行的結果,並提供3個選項 a.編譯錯誤 b.編譯成功,執行時程式崩潰 c.編譯執行正常,輸出10 class a private int value public a int n a a other void print int main a a 10 a b ...

C 傳參構造的優化和討論構造拷貝構造N中呼叫情況

2.c 返回值賦值和返回值使用一般會進行編譯器的優化。3.c 函式引數 或者返回值 賦值時,如果其型別是類並且對應的建構函式存在,那麼自動匹配的建構函式構造目標型別。例 test1中呼叫了 次aa的拷貝建構函式,次aa的賦值運算子函式的過載。test2中呼叫了 次aa的拷貝建構函式,次aa的賦值運算...

拷貝建構函式為什麼要用引用傳參?

拷貝建構函式是類的六個預設成員函式之一,他是建構函式的乙個過載形式,其引數只有乙個且必須要引用傳遞,那我們不禁想問值傳遞可以嘛?下面是乙個拷貝建構函式的 讓我們來分析下 date const date d intmain 當用已存在的物件建立新物件時候,編譯器會自動呼叫拷貝建構函式完成新物件的初始化...