簡體   English   中英

初始化列表問題,重點是std向量

[英]initialization list question, with emphasis on std vector

新手在這里,為了幫助解決我的C ++項目中的問題,我正在使用g ++中的-Weffc ++選項進行編譯。

它給了我數百個關於“警告......應該在成員初始化列表中初始化”的警告

這真的是必要的,因為它會a)花一點時間把它們全部寫進來,並且b)當我很高興在只需要時初始化變量時,讓事情變得更加混亂。

但更具體地說,我如何初始化std :: vector?

是這樣的,即只是在括號中加0? 我的標題:

class Blade;
class Postpro {
   public:
     Postpro(string fName) : theFileName(fName),
                             blade(NULL),
                             sizes(10),
                             t(std::vector<double>(0){};
     ~Postpro(){};
     void test();

   private:
     string theFileName;
     Blade* blade;
     int sizes;
     std::vector<double> t;
}

然后在cpp我只是調整矢量大小,如果我想使用它?

void Postpro::test() {
    blade = new Blade;
    t.resize(37);
}

謝謝

打字不需要太多時間,因為你打字太多了:

代替

t(std::vector<double>(0))

你可以寫

t(0)

它應該是相同的

t()

警告可能有點過於迂腐。 無論如何,具有默認構造函數的類將自動初始化。 警告標志僅提醒您未初始化的POD成員似乎更有價值(否則您會得到太多噪音)。

可能的用途是它向讀者顯示您確實打算使用默認構造函數來初始化該成員。

可能是矢量的有效值,但我從未見過它。

你真的不必提供任何值,因為vector有一個默認的構造函數。 只是一個t()會做。

警告只是一個警告,無論如何都會調用vector的默認構造函數。

您可以按照這樣做的方式執行此操作,但沒有意義 - 默認構造函數執行完全相同的工作。 最好使用初始化列表,但如果它導致不可讀或不必要的復雜代碼,那么初始化(更准確地說,將它們從默認值重置)構造函數體中的成員變量是完全沒問題的。

暫無
暫無

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

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