C 的函式返回值是如何構造的?

時間 2021-07-02 19:00:12

1樓:

你如果是想問為什麼少輸出乙個new的話,那是因為F在隱式建立返回值物件的過程中,

呼叫的是複製建構函式A(const A&)而不是預設的無參建構函式A(),所以你自定義的無參建構函式A()並沒有捕獲到這次構造。

#include

using namespace std;

struct A

~A()

A(const A& o) // 把複製建構函式也自定義即可。

};A F(A& aa)

int main()

A aa;

A bb=F(aa);

return 0;

}結果:

0x7ffd506188af new

0x7ffd506188ae copy new0x7ffd506188ae delete0x7ffd506188af delete另外這無關返回值的問題,返回值的構造並沒有什麼特殊的地方(至少表面上),純粹是因為你用乙個物件初始化另乙個物件(這裡是用引數A初始化了返回值物件)。

如果你不呼叫函式,直接在main裡寫A bb=aa;也是一樣的情況。

2樓:

aa先new乙個A(),列印 new,然後通過函式把aa的值返回給bb,結束程式的時候先析構bb再析構aa,列印兩個delete,沒毛病呀

JS 建構函式返回值的問題

如果return的值是object,那麼就返回這個return的object,前面的this就都是無效的 如果return的值型別不是object,就還是返回this 搬運一下Annotated ES5 11.2.2 The new Operator The production NewExpres...

c 函式的右值 臨時變數返回值會先拷貝後銷毀嗎

穀雨同學 一般情況下都不需要 而且不建議 手動在返回值處 std move。這是因為,C 17 強制要求返回值優化 簡稱 RVO 而大部分編譯器會實現具名返回值優化 簡稱 NRVO 返回值優化是指,如果 return 的值是乙個純右值時候,會進行複製消除 Tf 必須優化 直接構造而非 構造 複製構造...

C 要如何解決函式功能大致相同只有返回值不同的問題

Minghao Hu namespace TrashBin private static Union string GetUnion boolid return 1 public struct Union T2 private Union T1 v1 private Union T2 v2 publ...