關於c 拷貝建構函式和類初始化列表的一些想法

2021-10-04 03:38:57 字數 1074 閱讀 7357

#include

using

namespace std;

class

elea

elea

(elea &a)};

class

eleb

eleb

(eleb &b)};

class

c// 1

//列印2次

// elea copy construction

// eleb copy construction

// c(elea a, eleb b):m_a(a),m_b(b){} // 2

//列印4次

// eleb copy construction

// elea copy construction

// elea copy construction

// eleb copy construction };

intmain

(void

)

這是一道突發腦抽想到的拷貝建構函式跟初始化列表結合起來的比較好玩的題目

對於1處**的列印結果如下

test class initialization list:

elea copy construction

eleb copy construction

注釋1處** 使用2處**,結果如下:

test class initialization list:

eleb copy construction

elea copy construction

elea copy construction

eleb copy construction

你做對了麼?

要點如下:

對於1:

引數初始化順序與初始化表列出的變數的順序無關,它只與成員變數在類中宣告的順序有關

試試將m_a和m_b的宣告順序調換下看會發生什麼

如下:

class

c

拷貝建構函式 拷貝初始化

1 格式 1 foo const foo other 複製建構函式 左值賦值 2 foo foo other 移動建構函式 右值賦值 3 explicit foo size type count 禁止隱性轉換 2 引數與返回值 沒理解?2 合成拷貝建構函式 編譯器會將給定物件中非static成員拷貝...

C 類建構函式初始化列表和初始化順序

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 class cexample 建構函式內部賦值 cexample 上面的例子中兩個建構函式的結果是一樣的。上面的建構函式 使用初始化列表的建構函式 顯式的初始化類的成員 而沒使用初始化...

C 直接初始化,拷貝初始化,呼叫哪個建構函式?

很多c 新手不明白直接初始化 拷貝初始化,不清楚初始化過程中使用哪個建構函式。在學習過程中,要有基本概念,並且養成正確的認識也是非常重要的。因此整理了本文。常見錯誤認識1 1.使用 和使用 定義物件沒什麼區別。直接初始化 拷貝初始化。2.直接初始化使用建構函式。錯,也可能使用拷貝建構函式。3.拷貝初...