在以下代码中, 是什么意思: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()的定义。
答案 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) {}
};