一个c ++语法问题(结构方法)

时间:2011-06-09 13:36:00

标签: c++ struct

在以下代码中, 是什么意思:next(next_par),info(info_par)?

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的信息(info_par),并将next_par分配给next for next(next_par)。但我没有看到next(),info()的定义。

4 个答案:

答案 0 :(得分:3)

:next(next_par),info(info_par)是成员变量的初始化列表。而不是:

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

编辑:正如注释一样,如果您的成员对象变量需要使用非默认构造函数构造,则初始化列表可能很重要。

答案 1 :(得分:1)

这是一个C ++初始化列表。它只出现在构造函数中。它用于为正在构造的对象的数据成员分配值。关键是一旦构造函数开始运行,所有数据成员都已经被赋予了众所周知的值。

答案 2 :(得分:1)

这是成员初始化列表,您可以通过直接调用其中一个构造函数来初始化您的成员。在这种情况下,将使用发送到list_node构造函数的参数初始化next和info成员。

答案 3 :(得分: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) {}
};