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

one c++ syntax question (a structure method)

本文关键字:一种 结构 方法 c++ 语法 问题 一个      更新时间:2023-10-16

在以下代码中,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分配给infoforinfo(info_par),并将next_par分配给与nextfornext(next_par)。但是我没有看到next()、info()的定义。

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

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

EDIT:请注意,如果您有需要使用非默认构造函数构造的成员对象变量,则初始化列表可能很重要。

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

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

这是一个初始化列表,值初始化列表中类或结构的成员变量。这些变量是在构造函数本身的实际主体执行之前初始化的。通常情况下,它是可选的(尽管这是一个好主意,因为它在执行构造函数主体之前为任何成员变量创建了一个已知状态),但如果您试图在没有派生类或结构的默认构造函数的情况下初始化基类或结构,则它也是必需的,因为基类需要在派生类之前构造。

例如:

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) {}
};
相关文章: