C程式複製(copy)建構函式的呼叫這個程式最後怎麼呼叫了複製建構函式呢

2022-03-14 22:57:25 字數 1714 閱讀 1859

1樓:匿名使用者

讓我們來研究下這句話:

d=usercode(a);

編譯器看到這句話,首先執行=右邊的表示式,呼叫usercode函式。

1、由於這個函式的形參是按照值傳遞的,在呼叫的時候首先創造這個函式作用域的

形參變數,也就是demo usercode(demo b)裡面的b,這時候呼叫複製建構函式demo b(a);

2、在函式內部,demo c(b);這句再呼叫一次複製建構函式;

3、在函式執行完畢後,return c;這句話,建立了一個臨時的demo物件,這時候又呼叫了一次

複製建構函式,這個臨時物件通常被放置在cpu暫存器裡面,供主調函式使用。

2樓:回一句晚安

在以下3種情況下,會呼叫複製建構函式

1.使用一個已存在的物件去初始化該類的另一個物件2.當函式的形參是某類的物件時,在呼叫該函式時,實參物件向形參物件傳遞值,需要呼叫

3.如果函式的返回值是某類的物件,那麼在函式呼叫時,會呼叫複製建構函式

d=usercode(a);中,把實參a傳遞到形參b時,呼叫了一次(情況2),demo c(b);時是用b去初始化c,呼叫一次(情況1),這種情況還有種表示是demo c=b;return c時又呼叫了一次(情況3),一共呼叫了3次複製建構函式

3樓:希伯來爵

a作為實參拷貝構造了形參b,這裡呼叫了一次b拷貝構造了c,這裡又一次

第三次剛才說錯了:

函式返回值c需要拷貝到臨時儲存空間以賦給d,這裡需要呼叫一次總共3次

4樓:匿名使用者

樓上的前兩個說對了,但是第三個不是c拷貝構造了d,而是c拷貝給了一個臨時的物件(因為函式結束時,c會被釋放掉,需要一個臨時物件儲存c的值),這個臨時物件是返回給主調函式(這裡是main函式)使用的。

給d賦值時呼叫的是自動為類過載的賦值運算子,而不是複製建構函式。

c++程式中複製建構函式呼叫了幾次?

5樓:匿名使用者

書上說的是對的,你是用debug執行的吧?

test t=u,這裡呼叫了一次

return t和x=fun(y)要合起來看,debug下會產生一個臨時變數去得到fun(y)的返回值,然後再把臨時變數賦值給x,這裡就又呼叫一次;release下會優化這一過程,直接將fun(y)賦值給x,省去臨時變數,所以release下總共只呼叫一次。

c++這個複製建構函式,怎麼呼叫了2次呢

6樓:東郭廣英歸卯

來分析一下你的程式運**況。。

從main()開始,

第一行a&u

=ss();

首先呼叫

ss()函式,在函式裡面定義了一個變數w,呼叫的是2個引數的建構函式。

然後返回,看看返回型別,是a,是屬於值傳遞,恰好你做了一個複製建構函式

而你需要的是a&

所以編譯器會做無關緊要的轉換,把a

轉換成a&

這樣就開始了

第一個a(a&i)

然後主函式裡面是a&

u=又一次呼叫複製建構函式。

然後u就

引用了ss

裡面生成的值,但是在賦值完成的時候,ss函式就會消亡掉。

在ss裡面的變數的生存期已經沒了,

所以呢u引用的記憶體裡面是沒有東西或者被更改了。

c程式理解怎麼理解建構函式建構函式名字為什

建構函式是物件導向的程式設計中出現的一種方法,它是每個類都會有的方法,作用是構造及初始化物件。為了程式編譯時能很好地辨識這個必須的 建構函式 那這個建構函式的名字最好就有一定的規定。現在規定了建構函式名字和類名一致,編譯時就知道哪些是建構函式,例項化物件時就會呼叫合適的建構函式進行類的例項化。建構函...

C 呼叫特定建構函式的問題

其實這個問題可以利用一個專門類來解決,解決四路同上面老兄相同。下面是例子。比如class a a class b b class c static b create type3 a,type4 b,type5 c 每次要建立新類時,就呼叫 c create a,b c create a,b,c 還可...

幫忙除錯C語言程式,刪除陣列中的元素(函式呼叫),3Q

如果你只是刪掉為k的值,然後輸入的話,只要一個for迴圈就夠了,把不等於k的值直接輸出就行,不用再存入陣列裡了,如 include void main else printf d x i printf n include int count 9 main int flag int i int del...