我试图做这样的事情:
int& g(int& number = 0)
{
//maybe do something with number
return number;
}
但它不起作用。它必须通过引用传递。感谢您的任何帮助。
PS我认为一旦你输入标题就出现“相关问题”是个好主意,但我也认为只有当它们与特定语言相关时才应该显示它们,即用类似的主题来查看对我来说没什么用问题,但在 Ruby 中。
我试图做这样的事情:
int& g(int& number = 0)
{
//maybe do something with number
return number;
}
但它不起作用。它必须通过引用传递。感谢您的任何帮助。
PS我认为一旦你输入标题就出现“相关问题”是个好主意,但我也认为只有当它们与特定语言相关时才应该显示它们,即用类似的主题来查看对我来说没什么用问题,但在 Ruby 中。
如果你真的想这样做:
例如:
// 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 上的工作方式的投诉,而不是在这里(尽管它会做的所有好处 - 回答这个问题表明他们仍然没有修复 code-after-list 错误)
您有一个非常量引用,这意味着您可以修改引用。但您的默认值是常数0。
这个函数有默认值真的有意义吗?
非常量引用不能绑定到临时(文字)。
在这里,接受参数并按值返回可能最有意义,并将其留给调用者将结果分配回变量(如果他们想要的话):k = g(k);
也许你也可以使用两个重载,但是“默认”的一个不能通过引用返回,这可能会导致一些混乱:
int& g(int&);
int g()
{
int arg = 0;
return g(arg);
}
你的成语是错误的。
一个全局函数基本上不应该返回一个引用——除了隐藏一个全局变量。这种情况是可以接受的,但是,使用是有问题的:如果变量已经是全局的,为什么将它隐藏在函数调用后面?
如果您的目标是修改参数,那么为什么要给出返回值?仅当您返回旧值时才有用 - 并且必须“按值”而不是“按引用”完成。
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;
}
在后一种情况下,通过引用传递参数和/或通过引用返回累加器是不必要的。
干杯,H。