2013-07-22 333 views
0

什麼是摘錄如下含義:C++函數聲明語法

: program_(program), max_iters_(max_iterations), num_iters_(0) 
在這段代碼

Search::Search(const string& program, int max_iterations) 
    : program_(program), max_iters_(max_iterations), num_iters_(0) 
{ 
    max_branch_ = 0; 
// ... 
} 
+1

請參見我的回答[C++構造函數名稱後面的冒號是做什麼的?](http://stackoverflow.com/a/1272707/96780) –

+0

請參閱此鏈接http://stackoverflow.com/questions/9903248 /初始化字段在構造函數初始化列表vs構造函數體 –

+3

只是好奇,但今天學習C++的人在哪裏。我無法想象任何沒有解釋這一點的介紹性文字。 –

回答

1

這是一個構造函數初始化列表。可推測,Search是數據成員program_max_itersnum_iters的一類。

+0

tnx的迴應。初始化函數體中的「max_branch_」和體前的「max_iters_」之間有什麼不同? – NewMrd

+0

@NewMrd你不能在構造函數體中初始化一個數據成員,你只能給它賦一個值。當你到達構造函數的主體時,所有的數據成員都被初始化了。 – juanchopanza

+0

看看[link] https://github.com/mabdi/CREST/blob/master/src/run_crest/concolic_search.cc line 57. – NewMrd

4

你指的是被稱爲初始化列表。類或結構體可以在其構造函數中使用此列表初始化成員變量。

例子:

struct foo 
{ 
    foo() : member_(0) {} 

    private: 
     int member_; 
}; 

如果您有沒有默認構造函數的成員初始化列表是尤爲重要 - 因爲當你在構造函數體達到,每個成員都將被創建。如果您沒有爲該成員選擇適當的構造函數,編譯將失敗。

例子:

struct bar { bar(int) {} }; 

struct foo 
{ 
    foo() 
     : bar_(0) // does not compile without this line 
        // because the compiler will try to default 
        // construct otherwise 
    {} 

    private: 
     bar bar_; 
}; 
0

首先,它不是一個函數的聲明,但是一個類構造函數實現

類搜索與2個參數的構造函數之前聲明,現在你是在實施前,其中參數用於初始化數據成員。

+0

我很挑剔,但構造函數是一個函數。它在12.1中的C++ 11標準中被稱爲特殊函數,但是仍然是一個函數。 – user2573221

+0

爲什麼在初始化列表中初始化「num_iters_」,但是「max_branch_」是在體內初始化? – NewMrd