函数省略结构体

Function omit struct

本文关键字:结构体 函数省      更新时间:2023-10-16

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

因为它是一个非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")) {
  // ...
}