函数中的默认参数[C ++]

时间:2009-12-14 10:03:38

标签: c++ default-value

我试着这样做:

int& g(int& number = 0)
{
//maybe do something with number
    return number;
}

但它不起作用。它必须通过引用传递。 谢谢你的帮助。

P.S。 我认为一旦你输入Title就出现“相关问题”是一个好主意,但我也认为只有当它们与特定语言相关时才应该显示它们,即对于我来说看待类似问题的主题并不是没用的。但是在Ruby中。

4 个答案:

答案 0 :(得分:11)

如果你真的想这样做:

  • 制作引用const,以便临时绑定到它
  • 将默认值放在函数声明中,而不是定义

例如:

// header
const int & g( const int & number = 0 );


// implementation
const int & g( const int & number )
{
//maybe do something with number
    return number;
}

PS发布关于SO如何在Meta上运行的投诉,而不是在这里(为了它将会做的所有好事 - 回答这个问题表明他们仍然没有修复代码列表后的错误)

答案 1 :(得分:4)

你有一个非const引用,这意味着你可以修改referand。但您的默认值是常量 0。

这个函数是否真的有默认值?

答案 2 :(得分:0)

非const引用无法绑定到临时(文字)。

这里最有意义的是接受参数并按值返回,然后将其留给调用者将结果返回给变量(如果他们想要的话):{{1 }}

也许您也可以使用两个重载,但“默认”一个不能通过引用返回,这可能会导致一些混淆:

k = g(k);

答案 3 :(得分:0)

你的习语错了。

全局函数基本上不应该返回引用 - 除了例如隐藏全局变量。这种情况是可以接受的,然而,使用是有问题的:如果变量已经是全局变量,为什么要将它隐藏在功能调用之后呢?

如果您的目标是修改参数,那么为什么要给出一个返回值?只有你自己才有用返回旧值 - 必须“按值”而不是“按引用”完成。


int g(int& arg) {
   int oldarg( arg );
   // maybe modify arg
   // return old value of arg
   return oldarg;
}

或:


const int& g(int& arg) {
    static int accumulator;
    accumulator += arg;
    return accumulator;
}

在后一种情况下,通过引用传递参数和/或通过引用返回累加器是不必要的。

欢呼声, 小时。