1

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

4

1 回答 1

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")) {
  // ...
}
于 2013-02-27T20:48:44.583 回答