函数省略struct

时间:2013-02-27 20:41:56

标签: c++

函数可能没有一些结构信息吗?像这样的东西 int f(int x,int y=1)并且调用f(2)它很好,但对于此int f(int x,struct my_struct &y) 考虑到它是一个参考,那么正确的方法是什么?

1 个答案:

答案 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")) {
  // ...
}