1

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

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

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

4

5 回答 5

7

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

于 2010-10-12T06:28:18.533 回答
2

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

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

对于 non- 的引用,const您需要指定默认“值”作为对 non- 的引用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();
}

干杯&hth.,

– 阿尔夫

于 2010-10-12T07:07:01.837 回答
1

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

至于引用参数的默认参数……当然是可以的。例如

extern int i;

void foo(int &r = i);
void bar(const double &r = 0);
于 2010-10-12T07:22:32.063 回答
0

我曾经使用默认值,但同时我改变了主意:当我显式编写参数值时,我发现代码更具可读性。有时我会定义另一种方法,如下所示:

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

代替

bool Initialize( const char * pszOptPath = NULL );
于 2010-10-12T06:36:31.677 回答
0

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

于 2010-10-12T07:21:01.817 回答