【问题标题】:Passing a variables as a default parameters in function c++ [duplicate]在函数c ++中将变量作为默认参数传递[重复]
【发布时间】: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..

标签: c++ function default-value


【解决方案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的重载方法就会得到它。
猜你喜欢
  • 1970-01-01
  • 2018-08-30
  • 2022-01-14
  • 1970-01-01
  • 2011-04-07
  • 2017-02-12
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多