1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?
初始化列表和構造函數初始化的區(qū)別是什么?
初始化和賦值對內置類型的成員沒有太大的區(qū)別,在成員初始化列表和構造函數體內進行,在性能和結果上都是一樣的。只有一些需要注意的事項
初始化列表一般情況如下:
Date(int year, int month, int day) : _year(year) , _month(month) , _day(day)構造函數初始化一般通過構造函數實現,示例:
#include<iostream> using namespace std; class Date { public:Date(int year, int month, int day) {this->_day = day;this->_month = month;this->_year = year;}private:int _year;int _month;int _day; };上面的構造函數(使用初始化列表的構造函數)顯示地初始化類的成員,
而沒有使用初始化列表的構造函數是對類的成員賦值,并沒有進行顯示的初始化。
注意事項
1. 每個成員變量在初始化列表中只能出現一次(初始化只能初始化一次)
2. 類中包含以下成員,必須放在初始化列表位置進行初始化:
引用成員變量
const成員變量
類類型成員(該類沒有默認構造函數)
#include
using namespace std;
class Date
{
public:
Date(int year, int month, int day) {
this->_day = day;
this->_month = month;
this->_year = year;
}
private:
int _year;
int _month;
int _day;
};
3. 盡量使用初始化列表初始化,因為不管你是否使用初始化列表,對于自定義類型成員變量,一定會先使 用初始化列表初始化
哪怕自己沒有初始化列表,編譯器自己會加初始化列表,效率會高一些。
4. 成員變量在類中聲明次序就是其在初始化列表中的初始化順序,與其在初始化列表中的先后次序無關
盡量不要使用成員初始化成員
類的成員變量的初始化順序是按照聲明順序嗎
在c++中,類的成員變量的初始化順序只與變量在類中的聲明順序有關,與在構造函數中的初始化順序無關,而且靜態(tài)成員變量先于實例變量,父類成員變量先于子類成員變量父類析構函數先于子類構造函數
class Test{ public:Test(){};Test::Test()n2(2), n1(1) private:int n1;int n2;};成員變量的初始化次序跟變量在內存中的次序有關,而內存中的排列順序早在編譯期就根據變量的定義決定了
從全局看,變量的初始化順序如下:
總結
以上是生活随笔為你收集整理的1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 目前地下城与勇士80版本中魔神使用的第一
- 下一篇: 金科长剧情介绍