2013-02-27 65 views
1

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

+0

欢迎堆栈溢出!我不明白你想问什么。你问结构参数是否可以有默认值?或者你问是否参考参数可以有默认值?或者是其他东西? – 2013-02-27 20:43:07

+0

是的。请注意,所提到的问题没有被接受的答案,但是最高的投票答案是你之后的答案。 – 2013-02-27 20:47:49

+0

谢谢,实际上他们都是。 – siloan 2013-02-27 20:50:05

回答

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")) { 
    // ... 
} 
+0

正是我需要的,谢谢! – siloan 2013-02-27 21:03:17

+0

@siloan如果我的回答有帮助,请接受它表示感谢! :) – 2013-02-27 21:04:45

+0

ups,抱歉,但我忘了这一点,完成。 – siloan 2013-03-01 08:58:45