編譯器合成copy constructors

2021-06-28 02:16:55 字數 968 閱讀 2574

編譯器合成copy constructors

當class 不展現bitwise copy semantics時編譯器會產生出來乙個copy constructors且缺乏乙個已宣告的copy constructor時

和default constructors一樣copy constructors也分為tivial(不被合成出來) & nontivial(被合成於程式之中,不展現bitwise copy semantics)

class 不展現bitwise copy semantics的四種情況:

1. 當class內含乙個memberobject而後者class宣告有乙個copy constructor時

2. 當class繼承自乙個base class而後者存在有乙個copy constructor時。(此種情況發生於乙個class object以其derived classes 的某個object做為初值之時)

3. 當class宣告了乙個或多個virtual functions時。(當編譯器匯入乙個vptr到class之中時,該class就不再展現bitwise semantics了)

4. 當class派生自乙個繼承串鏈,其中有乙個或多個virtual base classes時。

注:編譯器為了正確處理"以乙個class object 作為另乙個class object的初值",必須合成出乙個copy constructor

第1和2種情況,編譯器會將member或者 base class的"copy construcots"的呼叫操作安插到被合成 的copy construtor中。

每乙個編譯器對於虛擬繼承的支援承諾,都表示必須讓"derived class object 的virtual base class subobject位置"在執行期就準備妥當。維護"位置的完整性"是編譯器的責任,"bitwise copy semantics"可能會破壞這個位置,所以編譯器必須在它自己合成出來的copy constructor中做出仲裁。

編譯器合成複製建構函式

定義 只有單個形參,該形參是對本類型別物件的引用 常用const修飾 這樣的建構函式成為複製建構函式。使用方式 1 顯示使用 用乙個同型別的物件初始化該物件時 2 隱式使用 將該型別的物件傳遞給函式或從函式返回該型別物件時。三種型別的複製建構函式 bitwise copy constructor 逐...

編譯方舟編譯器

環境 mac os parallels desktop 安裝ubuntu 16.04 安裝基礎包 sudo apt get y install openjdk 8 jdk git core gnupg flex bison gperf build essential zip curl zlib1g ...

方舟編譯器編譯

目錄環境變數 安裝 ninja 和 gn 編譯成功 總結2019.9.1 編譯華為方舟編譯器原始碼 這篇文章僅僅是關於如何搭建環境並進行編譯。本機環境 ubuntu 16 server.一定要好好看參考文件!建議使用root賬戶操作 先 clone 原始碼華為開源平台 對應的參考文件openarkc...