定义或声明中的默认参数?

时间:2014-06-28 22:32:11

标签: c++

函数/方法的默认参数是否应该驻留在定义或声明中?什么是最佳实践,为什么?

class Test
{
    void method( bool flag /* = true */ ); // here?
};

void Test::method( bool flag /* = true */ ) // or here?
{

}

2 个答案:

答案 0 :(得分:1)

嗯,我没有时间给出正确答案,但注意到C ++§8.3.6/ 6说

  

类模板的成员函数的默认参数   应在类模板

中的成员函数的初始声明中指定

如果想要一个也适用于非模板代码的约定,最好将默认值放在第一个声明中。

对于可读性而言,这通常也是最实用的。


对于非模板代码,您可以在函数的后续重新声明中稳定地添加默认值,但必须可以省略右侧所有参数的实际参数。基本上这意味着减少尚未默认的参数的数量。我没有看到这个或任何理由的实用性,我从未在实践中看到它。


无论如何,关于你的语句in a comment“或者在定义中,好像它改变了你不必重新编译头”,请注意编译器在调用函数的地方必须可以看到默认值

答案 1 :(得分:0)

在这里做到

class Test
{
    void method( bool flag /* = true */ ); // here?
};

保持概览并让您的生活更轻松。