2013-02-27 48 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