2011-06-09 56 views
4

在下面的代碼中, 是什麼意思:next(next_par),info(info_par)?一個C++語法問題(一種結構方法)

struct list_node : public memory::SqlAlloc 
{ 
    list_node *next; 
    void *info; 
    list_node(void *info_par,list_node *next_par) 
    :next(next_par),info(info_par) /* what's the meaning of :next(next_par),info(info_par)?*/ 
    {} 
    list_node()      
    { 
    info= 0; 
    next= this; 
    } 
}; 

看起來要info_par分配到的信息(info_par)信息,並指派next_par到下下個(next_par)。但是我沒有看到next(),info()的定義。

回答

3

:next(next_par),info(info_par)是成員變量的初始化列表。

list_node(void *info_par,list_node *next_par){ 
    next = next_par; 
    info = info_par; 
} 

編輯:而不是僅僅作爲一個說明,初始化列表可以,如果你有需要使用非默認的構造函數構造成員對象變量是很重要的。

1

這是一個C++初始化列表。它只出現在構造函數中。它用於將值分配給正在構建的對象的數據成員。關鍵是一旦構造函數開始運行,所有的數據成員都已經被賦予了衆所周知的值。

1

這是成員初始值設定項列表,您可以在其中直接調用其構造函數來初始化成員。在這種情況下,下一個和info成員正在使用發送給list_node構造函數的參數進行初始化。

1

這是一個初始化列表,用於初始化列表中的類或結構的成員變量。這些變量在構造函數本身的實體執行之前被初始化。通常它是可選的(儘管無論如何它是一個好主意,因爲它會在構造函數體執行之前爲任何成員變量創建一個已知狀態),但是如果您嘗試初始化基類或結構而不使用默認構造函數派生類或結構,因爲基類需要在派生類之前構造。

例如:

struct base 
{ 
    int a; 
    base(int b): a(b) {} 
}; 

struct derived: public base 
{ 
    //we have to value-initialize the base-structure before the 
    //derived structure's construtor-body is executed 
    derived(int c): base(c) {} 
};