簡體   English   中英

構造函數初始化器列表與頭文件中的初始化

[英]Constructor initializer list vs initializing in the header file

在代碼庫中,我正在使用數十個標頭初始化變量:

bool toBeTrue = true;
int var = 1;

如果未在頭文件中初始化它們,則在構造函數的主體中初始化它們:

MyClass::MyClass()
{
 variable1 = 10;
 boolean2 = false;
};

是否初始化變量在頭文件(也許有initialzed為指針nullptrbooleans和簡單的ints頭文件有意義?)使編譯時間慢? 並將所有變量初始化移動到構造函數的初始化列表中會使編譯時間更快嗎?

這個:

MyClass::MyClass()
{
 variable1 = 10;
 boolean2 = false;
};

不是初始化! 成員將在構造函數的主體運行之前被初始化,然后您要分配值。 您的意思可能是

初始化列表

MyClass::MyClass() : variable1(10), boolean2(false) {}

並在標頭中的類初始化(我相信自C ++ 11起可用)中:

struct MyClass {
     int variable1 = 10;
     boolean2 = false;
};

在最后兩種情況下,這些值都用於初始化成員,因此速度沒有差異。 但是,在第一種情況下,您所做的事情超出了您實際想要的(初始化+賦值),因此,如果可能,應該避免這樣做。

類內初始化和初始化列表之間的細微差別是(參見例如此處

variable1 = 10; 

可能涉及副本。 這可以通過使用直接列表初始化來避免:

 struct MyClass {
     int variable1{10};
     bool boolean2{false};
};

但是,對於intbool這沒有任何區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM