深度探索C++ 对象模型(5)-Initialization list(1)
生活随笔
收集整理的這篇文章主要介紹了
深度探索C++ 对象模型(5)-Initialization list(1)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
以下四種情況,一定要使用成員初始化列表:
1.初始化一個引用成員
2.初始化一個const成員
示例代碼為
class Shape{const int m_size; //const 常量int & m_ref; // reference memberfloat m_width;float m_height; public:Shape(int s, float w, float h) : m_size(s), m_ref(s) //只能在這初始化{m_size =s; //在初始化將出錯m_width = w;m_height = h;}};- 如果不對m_size和m_ref進行初始化,則會引起編譯錯誤"E0366 “InitializationList::Shape::Shape(int s, float w, float h)” 未提供初始值設定項: ObjTest"
- 在構造函數(shù)中調用m_size=s;編譯錯誤為"錯誤 C2166 左值指定 const 對象"
3.調用一個基類的構造函數(shù),且這個構造函數(shù)需要傳參
示例代碼為
class A{public:A(int x); // A 的構造函數(shù)};class B : public A{ B(int x, int y) : A(x) // 必須在初始化表里調用基類 A 的構造函數(shù),否則此行引起編譯錯誤{ };};如果不加": A(x)",則會引起編譯錯誤"C2512 “InitializationList::A”: 沒有合適的默認構造函數(shù)可用“
4.調用一個成員類的構造函數(shù),且這個成員的構造函數(shù)要傳參時
示例代碼為
class A{public:A(int x); // A 的構造函數(shù)};class B{A m_a;B(int x, int y) : m_a(x) // 必須在初始化表里調用基類 A 的構造函數(shù),否則此行引起編譯錯誤{ }};如果不加": m_a(x)",則會引起編譯錯誤"C2512 “InitializationList::A”: 沒有合適的默認構造函數(shù)可用“
【引用】
[1]<<深度探索C++ 對象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 譯
[2] 代碼地址 https://github.com/thefistlei/cplusStudy.git
總結
以上是生活随笔為你收集整理的深度探索C++ 对象模型(5)-Initialization list(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度探索C++ 对象模型(4)-Defa
- 下一篇: 深度探索C++ 对象模型(5)-Init