3 回答

TA貢獻1847條經驗 獲得超11個贊
A a = A(5)
a
使用初始化器表達式作為參數調用所選函數;如果函數是構造函數,則調用初始化目標類型的cv非限定版本的臨時函數。臨時值是一個prvalue。然后,根據上述規則,調用的結果(是構造函數用例的臨時結果)被用于引導初始化副本初始化的目標對象。 在某些情況下,允許實現通過將中間結果直接構造到被初始化的對象來消除這種直接初始化過程中固有的復制;參見12.2,12.8。.
A(5)
a
當滿足某些條件時,即使對象的復制/移動構造函數和/或析構函數有副作用,也允許實現省略類對象的復制/移動構造。
在這種情況下,實現將省略的復制/移動操作的源和目標視為引用同一對象的兩種不同方式,并且該對象的銷毀發生在如果不進行優化就會銷毀這兩個對象的晚些時候。復制/移動操作的簡化,稱為 復制省略,允許在下列情況下(可合并以消除多份副本): [...]
當沒有綁定到引用(12.2)的臨時類對象被復制/移動到具有相同cv-非限定類型的類對象時
,可以通過將臨時對象直接構造到省略的復制/移動的目標中來省略復制/移動操作。
A a = A(5)
:
編譯器會看到帶有復制初始化的聲明。 這個 A(int)
構造函數以初始化臨時對象。 因為臨時對象是 不
綁定到引用,并且它確實具有相同的類型。 A
作為復制初始化表達式中的目標類型,編譯器可以直接將對象構造為 a
,臨時的

TA貢獻1848條經驗 獲得超6個贊
A a = A(5);
A a(5);
a
函數符號類型轉換(5.2.3)可用于創建其類型的新對象。[注意:語法看起來像構造函數的顯式調用。-尾注]
- 3 回答
- 0 關注
- 364 瀏覽
添加回答
舉報