【问题标题】:default parameters without name in c ++c ++中没有名称的默认参数
【发布时间】:2013-01-27 06:25:38
【问题描述】:

考虑函数:

void foo(int a = 3)//named default parameter
void foo1(int = 3)//unnamed default parameter

我了解第一个函数的需要。(“a”的值为3,可以在程序中使用)。 但是第二个函数(这不是错误)将 3 初始化为空。我究竟如何使用这个值,如果我可以使用这个值...

【问题讨论】:

标签: c++ parameters default


【解决方案1】:

在函数声明/定义中,参数可以有名字也可以没有名字,这也适用于有默认值的参数。

但要在函数内部使用参数,必须提供名称。

通常在声明带有默认参数的函数时

// Unnamed default parameter. 
void foo1(int = 3);

在函数定义中

void foo1(int a)
{
   std::cout << a << std::endl;
}

然后就可以调用了

foo1();   // the same as call foo1(3)
foo1(2);

【讨论】:

  • 是的。虽然这是否是“一个好主意”完全是主观的。
【解决方案2】:

我发现第二个声明在声明基类的空虚方法时非常有用

virtual void doSomething(bool = false) {};

我不想让它成为纯虚拟的,因为在许多派生类中我不想重新实现它,所以我在基类中将它留空。 但是在其他一些派生类中实现这个方法时,我需要默认值false

virtual void doSomething(bool en = false) {};

这没有错,但是编译器给出了未使用的参数警告

【讨论】:

    【解决方案3】:

    在这两种情况下,3 都被分配给 int 变量,该变量将在函数定义中确定。 所以在后面的情况下 - void foo1(int = 3); // 3 被分配给 int - 因为声明变量名不是必需的

    您可以将此与 - void fun(int,int); 联系起来 注意:不是从默认参数的角度来看,而是从函数声明的角度来看

    // 这里我们声明了两个int 变量,并且在函数声明时不需要给出它的名字。

    编辑:

    正如@chethan 所指出的 - void foo1(int = 3){ } 在函数定义中也是有效的,但是再次说明做一些你以后不能使用的事情(在函数体内)有什么用处。 例如:

    void foo1 (int a, int =2)
    {
    // do something
    // here you wont be able to use your second argument if you haven't gave it any name
    }
    

    所以我认为“不在函数定义中给出参数名称”是没有意义的。

    【讨论】:

    • void foo1(int = 3) 即使在定义中也是可能的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-14
    • 2023-03-17
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多