C 構造拷貝構造的 N 中呼叫情況

2021-08-03 07:50:46 字數 1505 閱讀 1600

1. 總結 c++ 對傳參和傳返回值時構造的優化處理。 

1)c++ 形式引數型別和返回值型別如果是引用,那麼在傳遞時,會把實參或者返回值的引用自動賦值給形式引數(返回值)。

2)c++ 返回值賦值和返回值的使用往往會進行編譯器的優化,例如:下面的呼叫中,只會呼叫兩次建構函式(一次是預設建構函式,另外一次是自動拷貝建構函式)

student s = getstudent();

student getstudent()

3)

student s;

student s2 = s;

student s3(s);

編譯器會自動將上述第二句優化成第三句。

4)c++ 函式引數(或者返回值)賦值時,如果其型別是類並且對應的建構函式存在,那麼會自動呼叫匹配的建構函式構造目標型別,例如:

student s = getstudent();

student getstudent()

student(const student* s)

雖然返回值型別是 student 類物件,但是返回值是指標並且存在對應的建構函式(student 指標建構函式),所以程式能夠正確編譯,但是如果沒有顯式過載對應的特殊建構函式,程式編譯不能通過。

2. 完成下面的題目。 

test1 中呼叫了___次 aa  的拷貝建構函式,___次 aa  的賦值運算子函式的過載。 

test2 中呼叫了___次 aa  的拷貝建構函式,___次 aa  的賦值運算子函式的過載。 

test3 中呼叫了___次 aa  的拷貝建構函式,___次 aa  的賦值運算子函式的過載。

class aa

{};aa f(aa a)

void test1()

void test2()

void test3()

test1 中呼叫了_2_次 aa  的拷貝建構函式,_1_次 aa  的賦值運算子函式的過載。 

test2 中呼叫了_2_次 aa  的拷貝建構函式,_0_次 aa  的賦值運算子函式的過載。 

test3 中呼叫了_3_次 aa  的拷貝建構函式,_0_次 aa  的賦值運算子函式的過載。 

討論構造 拷貝構造的N種呼叫情況

1.先總結c 對傳參和傳返回值時構造的優化處理。總結 在c 中,傳參和傳返回值如果是引用型別,則不用呼叫拷貝建構函式。當語句為乙個表示式時,編譯器會自動優化。一般而言,呼叫幾次構造和拷貝構造,就會呼叫幾次析構函式。系統在什麼情況下會進行優化呢?當拷貝構造存在連續的賦值情況時,當多個臨時物件連續賦值。...

討論構造拷貝構造的N中呼叫情況的問題

1.c 形式引數型別和返回值型別如果是引用,那麼在傳遞時,會把實參或者返回值的引用自動賦值給形式引數。2.c 返回值賦值和返回值的使用往往會進行編譯器的優化.例如下面的呼叫中,只會呼叫兩次建構函式 一次預設建構函式,一次自動拷貝建構函式 注 只有在乙個表示式內才會優化 test1中呼叫了 2 次aa...

討論構造拷貝構造的N種呼叫情況問題

1.先總結c 對傳參和傳返回值時構造的優化處理。1 在c 中,傳參和傳返回值時,如果是引用型別,則不用呼叫拷貝建構函式,直接返回別名。當語句為乙個表示式時,編譯器會選擇優化,將建構函式與拷貝構造合併。在c 中,呼叫幾次建構函式和拷貝建構函式,就會相應的呼叫幾次析構函式。2 系統在什麼情況下會進行優化...