应该在哪里指定默认参数?

时间:2010-10-12 06:26:15

标签: c++ default-arguments

在我的工作场所,通常在声明中指定默认参数。什么是正常的自定义?我应该在方法声明或方法定义中指定默认参数吗?

编辑:有没有办法为引用指定默认参数?

编辑:有人可以提供参考参数默认参数的示例吗?

5 个答案:

答案 0 :(得分:7)

方法声明。调用者可能没有定义,但必须在调用位置知道默认参数。

答案 1 :(得分:2)

ybungalobill已经回答了关于在哪里的问题。

关于引用,对于const T 的引用,您只需直接指定默认值即可。

对于非const的引用,您需要指定默认的“值”作为对非const的引用。这可能是全局或具有适当转换的类的实例。如,

#include <iostream>

struct DummyInt
{
    int dummy;
    operator int& () { return dummy; }
    DummyInt(): dummy( 0 ) {}
};

void foo( int& v = DummyInt() ) {}  // Whatever

int main()
{
    int x   = 42;
    foo( x );
    foo();
}

干杯&amp;第h。,

- Alf

答案 2 :(得分:1)

通常的做法是为所有翻译单元设置相同的默认参数集。为了实现这一点,你显然必须在头文件中的函数声明中指定默认参数。

参考参数的默认参数...当然,可以。例如

extern int i;

void foo(int &r = i);
void bar(const double &r = 0);

答案 3 :(得分:0)

我曾经使用默认值,但同时我改变了主意:当我明确地写出参数值时,我发现代码更易读。有时我会定义另一种方法,如下所示:

bool Initialize( const char * pszPath );
bool InitializeDefault();

而不是

bool Initialize( const char * pszOptPath = NULL );

答案 4 :(得分:0)

必须在方法声明中,以便调用者可以知道函数的确切期望 你可以像Alf说的那样做但不确定为什么需要它。可能你想看看你的功能设计。