簡體   English   中英

如何在C ++中為std :: list參數設置默認值?

[英]How to set a default value for std::list argument in C++?

我想將一個空列表設置為list參數的默認值。 我嘗試使用{},list。(),NULL和{NULL}無濟於事。

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*>()

error: expected primary-expression before ‘.’ token
 void f(treeNode* root, int &n, list<treeNode*> &path = list<treeNode*>.()){
 void f(std::list<treeNode*> = ??); 

您可以使用一對空的大括號:

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

我試過使用... list。()

這是語法錯誤。

空值,

不能從指針常量初始化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.。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM