我试着这样做:
int& g(int& number = 0)
{
//maybe do something with number
return number;
}
但它不起作用。它必须通过引用传递。 谢谢你的帮助。
P.S。 我认为一旦你输入Title就出现“相关问题”是一个好主意,但我也认为只有当它们与特定语言相关时才应该显示它们,即对于我来说看待类似问题的主题并不是没用的。但是在Ruby中。
答案 0 :(得分:11)
如果你真的想这样做:
例如:
// 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;
}
在后一种情况下,通过引用传递参数和/或通过引用返回累加器是不必要的。
欢呼声, 小时。