"ListNode dummy{-1, head};"是什么意思?
What does "ListNode dummy{-1, head};" mean?
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) { }
};
这是ListNode
的定义。 ListNode dummy{-1, head};
是什么意思?
这就是列表初始化,一种用于初始化 C++11 中引入的对象的新语法。
在这种情况下,这是一个错误。由于该类具有用户提供的构造函数,因此只能使用构造函数对其进行初始化;并且此初始化需要一个接受两个参数的构造函数,而这两个参数不存在。如果有合适的构造函数,例如
ListNode(int val, ListNode* next) : val(val), next(next) { }
然后它将使用它来初始化对象,将值-1
和head
作为构造函数参数传递。
如果类没有声明构造函数(或仅声明已删除或默认的构造函数),使其成为聚合,则将执行聚合初始化,将第一个成员初始化val
-1
,第二个成员next
head
。但它不是一个聚合,所以这不会发生。
这种语法结构
ListNode dummy{-1, head};
定义一个类型为 ListNode 的对象,该对象名为 dummy,并使用大括号初始化列表作为初始值设定项。
编译器搜索具有两个参数的类构造函数,类定义中没有这样的构造函数只有一个参数的构造函数。因此,编译器将发出一个错误,指出它没有找到合适的构造函数。
我想你看到了以下结构
int a[] = { 1, 2, 3 };
事实上,这种结构
ListNode dummy{-1, head};
是一样的。你可以把它写成
ListNode dummy = {-1, head};
不同之处在于类 ListNode 具有用户定义的构造函数,因此编译器将在类中使用两个参数搜索适当的构造函数。
如果类具有构造函数
ListNode(int x, ListNode *node = nullptr ) : val(x), next(node) { }
而不是
ListNode(int x) : val(x), next(nullptr) { }
然后代码片段将成功编译,因为将调用此修改后的构造函数。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思