函数可能没有一些结构信息吗?像这样的东西
int f(int x,int y=1)
并且调用f(2)它很好,但对于此int f(int x,struct my_struct &y)
考虑到它是一个参考,那么正确的方法是什么?
答案 0 :(得分:2)
由于它是非const
引用,因此无法将其绑定到作为临时对象的默认值。您可以将其绑定到某些非临时对象,如下所示:
my_struct obj;
int f(int x, my_struct& y = obj) {
// ...
}
但是这意味着没有第二个参数的f
的每次调用都可以访问相同的obj
。他们每个人都可以修改它,然后下一个会收到一个具有不同状态的obj
。这不是默认值的典型值。您希望每次都具有相同的默认值。
如果有可能不传递对象,为什么你的函数会通过非const
引用来获取对象?如果希望调用者传递一个对象供您修改,可以使用非const
引用。
将y
参数改为const
引用可能更有意义。当您希望调用者传递一个对象供您观察并且您不想复制它时,可以使用const
引用。然后你可以将它绑定到一个临时对象,如下所示:
int f(int x, const my_struct& y = my_struct(1, 2, "some args")) {
// ...
}