直接初始化和複製初始化

2022-02-23 05:07:35 字數 477 閱讀 3619

1、classtest ct1("ab");這條語句屬於直接初始化,它不需要呼叫複製建構函式,直接呼叫建構函式classtest(const char *pc),所以當複製建構函式變為私有時,它還是能直接執行的。

2、classtest ct2 = "ab";這條語句為複製初始化,它首先呼叫建構函式classtest(const char *pc)函式建立乙個臨時物件,然後呼叫複製建構函式,把這個臨時物件作為引數,構造物件ct2;所以當複製建構函式變為私有時,該語句不能編譯通過。

3、classtest ct3 = ct1;這條語句為複製初始化,因為ct1本來已經存在,所以不需要呼叫相關的建構函式,而直接呼叫複製建構函式,把它值複製給物件ct3;所以當複製建構函式變為私有時,該語句不能編譯通過。

4、classtest ct4(ct1);這條語句為直接初始化,因為ct1本來已經存在,直接呼叫複製建構函式,生成物件ct3的副本物件ct4。所以當複製建構函式變為私有時,該語句不能編譯通過。

直接初始化和複製初始化

關於這個問題,國內外都有許多爭論,但我至今未找到滿意的答案,至於為為什麼,這就是今天要說明的。可能大家都有看過c primer,我看的是第四版,中文版,英文水平不怎麼樣。其中第13章,描述說,複製建構函式可用於 1.根據另乙個同型別的物件顯式或隱式初始化乙個物件 2.複製乙個物件,將它作為引數傳遞給...

C 直接初始化和複製初始化

在c 裡,物件初始化是乙個非常重要但又容易令人混淆的問題。這裡是自己的一些總結。一。初始化與賦值的含義 初始化 包括建立 或說定義 物件並且賦給初值。如果乙個物件只被建立而沒有被初始化,則該變數只能用於被賦值 賦值 擦除物件的當前值並用新值代替。二。內建型別 一 直接初始化 1.空初始化 即無引數無...

直接初始化與拷貝 複製 初始化

認識這兩種初始化有助於我們加深對語言的理解,可以更好的優化 我們常見的幾種初始化的形式 string str1 first 拷貝初始化,編譯器允許把這句話改寫為string str first 但是string 類必須有 public 的拷貝 移動 建構函式 string str2 10,a 直接初...