在函数c ++中将变量作为默认参数传递[重复]
Posted
技术标签:
【中文标题】在函数c ++中将变量作为默认参数传递[重复]【英文标题】:Passing a variables as a default parameters in function c++ [duplicate] 【发布时间】:2014-08-08 11:11:09 【问题描述】:为什么 C++ 不允许这样做
void insertData (T data1,Tree<T> *tree=TreeTop);
允许将值作为默认参数传递,但为什么不能将变量作为默认参数......??
class BinaryTree
private :
Tree<T> *TreeTop;
unsigned int numberOfElements;
public :
void insertData (T data1,Tree<T> *tree=TreeTop);
// Only Prototype For Question Purpose
【问题讨论】:
是的,同样的疑问..!! Dint Find On Searching.. 【参考方案1】:你可以这样重载:
void insertData(T data1)
insertData(data1, TreeTop);
void insertData(T data1, Tree<T> *tree)
// Code
【讨论】:
是的,我只是这样做了...只是想知道编译器在将变量作为默认参数传递时面临哪些技术难题...【参考方案2】:如果您将 TreeTop 设为静态,这将起作用:
class BinaryTree
private :
static Tree<T> *TreeTop;
unsigned int numberOfElements;
public :
void insertData (T data1,Tree<T> *tree=TreeTop);
在这种情况下,它将是“insertData”方法调用的类级默认值。如果你想要一个实例级别的默认值,你将不得不做类似的事情
class BinaryTree
private :
Tree<T> *TreeTop;
unsigned int numberOfElements;
public :
void insertData (T data1,Tree<T> *tree=NULL);
然后,在你的实现中,做
public void BinaryTree::insertData(T data1, Tree<T> *tree)
if (tree==null) tree=TreeTop;
...
【讨论】:
您的意思是nullptr
(或 C++03 的 NULL
)而不是 null
。
它假定nullptr
不是一个有效的输入。
@Jarod42 - 是的,我脑子里有 C# ~ 更正了。第二点也是正确的 - 假设 null 不是有效的输入。如果 null 有效,那么之前的poster的重载方法就会得到它。以上是关于在函数c ++中将变量作为默认参数传递[重复]的主要内容,如果未能解决你的问题,请参考以下文章