C 對傳參和傳返回值時構造的優化處理

2021-08-09 18:35:37 字數 1338 閱讀 4631

如果讀者不太了解c++的四個預設成員函式,可以看這篇部落格 enter link description here

有時候c++的編譯器會對我們的**進行優化處理,使我們很困惑。實際上,這些優化都是有跡可循的,不是雜亂無章的。

當多個臨時物件連續賦值的時候 ,簡單點來說就是,在一次拷貝構造結束後,並沒有直接返回給要建立的物件而是又再次進行了拷貝構造。或者說是,建立乙個臨時物件,來進行拷貝構造,然後又返回了乙個臨時物件,再用這個返回的臨時物件繼續拷貝構造。這時候,系統就會自動優化。

例如:

#define _crt_secure_no_warnings 1

test1 呼叫了兩次次拷貝構造,一次賦值運算子的過載

test2呼叫了兩次拷貝構造,0次賦值運算子的過載。

其實這個道理很簡單,試想一下,誰想重複做不必要的工作,或者說,能一次做好的事情,為什麼要做兩次。編譯器也是如此。

優化之前:

會用a拷貝構造出乙個臨時物件,然後用這個臨時物件拷貝構造出a2

優化之後

直接用a拷貝構造出a2。

呼叫了三次拷貝構造,0次賦值運算子的過載。

省去了兩個臨時物件的建立。方框圈住的,都優化了,所以看起來呼叫了5次拷貝構造,實際上只呼叫了3次拷貝構造;

匿名物件的優化

C 對傳參和傳返回值時構造的優化處理

1 建構函式 成員變數為私有的,要對它們進行初始化,必須用乙個公有成員函式來進行。同時這個函式應該有且僅在定義物件時自動執行一次,這時 呼叫的函式稱為建構函式 constructor 建構函式是特殊的成員函式,其特徵如下 a.函式名與類名相同。b.無返回值。d.建構函式可以過載。e.建構函式可以在類...

C 對傳參和傳返回值時構造的N中優化處理

系統在什麼情況在會進行優化呢?1.當拷貝構造存在連續賦值的情況的時候 2.當多個臨時物件連續賦值的時候,簡單來說就是就是,再一次拷貝構造結束後,並沒有直接返回要建立的物件,而是再一次進行了拷貝構造,或者建立乙個臨時物件,來進行拷貝構造,然後又返回乙個臨時物件,在用這個返回的臨時物件繼續拷貝構造,這是...

函式傳參以及函式的返回值

1.形式 其中在函式內部的a叫做形參,而呼叫函式裡的100叫做實參 function 在此處傳參 fn1 100 function fn1 a 可以相當於 fn1 100 function fn1 var a 100 但不能這麼寫2.也可以傳多個引數,如 fn1 100,px function fn...