c ++中没有名称的默认参数

时间:2013-01-27 06:25:39

标签: c++ parameters default

考虑功能:

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

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

3 个答案:

答案 0 :(得分:6)

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

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

通常在声明具有默认参数

的函数时
// 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);

答案 1 :(得分:1)

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

virtual void doSomething(bool = false) {};

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

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

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

答案 2 :(得分:0)

在这两种情况下, 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
}

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