在函数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 ++中将变量作为默认参数传递[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 函数中将 jquery 变量作为参数传递

在C代码中将结构体变量作为参数传递效率忒低

如何在 Maxima 中将列表作为变量参数函数传递?

如何在C中将函数指针数组的函数指针作为函数参数传递?

如何在c ++中将前面的函数参数设置为其默认值?

在 C 中将多维数组作为参数传递