如何在C ++中为std :: list参数设置默认值?

时间:2019-06-03 01:55:33

标签: c++

我想将一个空列表设置为list参数的默认值。我尝试使用{},list。(),NULL和{NULL}无济于事。

b

使用void f(std::list<treeNode*> &path = ??);时,

{}

使用error: could not convert ‘<brace-enclosed initializer list>()’ from ‘<brace-enclosed initializer list>’ to ‘std::list<treeNode*>&’ 时,

list<treeNode*>()

1 个答案:

答案 0 :(得分:3)

void f(std::list<treeNode*> = ??);

您可以使用一对空的大括号:

void f(std::list<treeNode*> = {});

  

我尝试使用...列表。()

这是语法错误。

  

NULL,

无法通过指针常量初始化std::list

  

和{NULL}

这将初始化一个带有单个null元素的非空列表。

  

{} ...无济于事。

这是自C ++ 11起的正确解决方案。在C ++ 11之前的标准中,您将不得不重复输入类型名称:

void f(std::list<treeNode*> = std::list<treeNode*>())

针对新问题进行编辑:

void f(std::list<treeNode*> &path = ??);

这是不同的。非常量左值引用不能绑定到初始化程序列表。您必须:

  1. 使用const左值引用参数。
  2. 或者使用右值引用参数。
  3. 或者默认情况下初始化对某些静态对象的非常量左值引用...如果函数更改了参数,则这不是一个好选择。如果参数未更改,请改用1.。