使用默认参数是健康习惯还是坏习惯?

时间:2014-02-06 10:38:50

标签: c++

我们应该何时使用默认参数?什么是正确的语法,它们应该在哪里使用?经常使用它们是好习惯还是坏习惯?它们会影响效率吗?

3 个答案:

答案 0 :(得分:1)

可以在任何C ++参考中找到正确的语法,例如: http://msdn.microsoft.com/en-us/library/91563f79.aspx。他们永远不应该有任何效率影响。至于使用提示,与其他一切一样,它取决于具体情况。他们可能会使事情变得清晰或更复杂。 还有一件事值得一提 - 人们应该注意虚函数中的默认参数,因为它们的值是根据静态类型解决的,这可能是意外的。

答案 1 :(得分:1)

只有在我将大事件作为默认参数包含但其未被任何调用者使用时,我才能想到影响效率的地方。例如:

#include <iostream>
void foo(std::ostream& out=std::cout) {
    out << "foo";
}

如果没有任何调用者使用默认参数,并且程序的其余部分不需要<iostream>那么它将被包含在徒劳中,增加了可执行文件的大小(以及编译时间,可能会也可能不会很重要。)

答案 2 :(得分:0)

参数的默认值仅在(成员)函数的声明中指定,如下所示:

void fun(int value = 0);

请注意,只有参数列表中的最终参数可能具有默认值。例如。以下是禁止的:

void fun(int v1 = 0, int v2);

当在其他地方定义函数时,必须省略默认值。

void fun(int value)
{ 
    cout << value << '\n'; // will print 0 when nothing was passed by the user
}

他们以任何方式具有运行时开销,因为当用户未指定时,编译器会将此值添加到函数调用中。仅在特定默认行为直观时才使用它们。

它有时可以作为函数重载的替代方法。

也可以实现上述例子的效果
void fun();
void fun(int value);

但这意味着您必须实施fun两次(其中fun()只需拨打fun(0))。