一个c++语法问题(一种结构方法)
one c++ syntax question (a structure method)
在以下代码中,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) {}
};
相关文章:
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 在 c++ 中将一种结构类型分配给另一种类型
- c++ 是否提供了一种使整个结构常量(不可修改)的方法?
- 动态分配一维结构数组:两种方法
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 类中的结构不是一种类型
- 错误将结构复制到同一类型的另一种
- 将指向结构的指针转换为具有较少字段数的另一种结构类型
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 模板结构可容纳两种类型,但当时只有一种
- 是否有一种更简单的方法可以使用GDB将C捕获的C结构捕获
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 在cuda中使用静态成员函数模板结构的另一种方法
- 将C++结构写入文件并使用另一种编程语言读取文件
- C++ 开关结构(运行最后一种情况两次)
- 对结构进行操作并将结果分配给同一结构是否是一种不好的做法?为什么
- 一个c++语法问题(一种结构方法)