有乙個類,名字是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 需寫全...