C 中用函式返回值初始類物件時的乙個問題

2021-07-02 02:09:03 字數 1440 閱讀 7545



有乙個類,名字是c,假設有乙個函式,它的定義為:

[cpp]view plain

copy

print?

c func()    

c func()

即返回c型別的函式,那麼考慮表示式c newc = func();將呼叫幾次建構函式?分別是什麼型別的建構函式?

解答:<>裡有提到這個過程,首先會建立乙個臨時的類物件,該物件是由複製建構函式生成,引數是tmp。然後再呼叫複製建構函式初始化newc。所以一共呼叫了兩次複製建構函式。

但現在的gcc不這麼處理,會做乙個優化。在c函式裡有個tmp變數,離開func時不撤銷這個物件,而是讓newc和這個物件關聯起來。也就是說tmp的位址和newc是一樣的。

實驗:

[cpp]view plain

copy

print?

#include 

using

namespace std;  

class test  

test(const test& a )  

test(int a)  

test& operator=(const test& a )  

static

void print ()  

int showa ()  

};  

int test:: total = 0;  

test testfunc(test t )  

int main()    

#include using namespace std;

class test

test(const test& a )

test(int a)

test& operator=(const test& a )

static void print ()

int showa ()

};int test:: total = 0;

test testfunc(test t )

int main()

那個static變數用來記錄一共呼叫了幾次建構函式。

結果:

解釋:

第1行是因為test para;呼叫了預設建構函式。

第2行是因為把para傳給函式形參呼叫了賦值建構函式。

第3行表明進入了testfunc()

第4行tmp呼叫引數為int的建構函式

第5行輸出tmp的位址

第6行表明要離開函式

第7行輸出result的位址,發現和tmp的位址是一樣的

C 函式返回值。

一 params.可變引數,無論有幾個引數,必須出現在引數列表的最後,可以為可變引數直接傳遞乙個對應型別的陣列。class program test msg intarry static void test string msg,params int args 二 ref 引用傳遞 三 out ou...

C 中返回值為 類物件 詳解

c 中返回值為 類物件 詳解 如下 include using namespace std 建乙個test類 class test test int aa,int bb test const test t void print test private int a int b 以下為幾個方便說明的操...

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...