2012-12-29 78 views
4

他們告訴我使用模板來查找總和。爲什麼這不起作用?謝謝。這個模板代碼爲什麼不起作用?

template <typename A, typename B, typename C> 
auto add(A a, B b, C c = a + b) -> decltype(c) { 
    return c; 
} 

我以爲C++ 11說你可以在聲明後使用參數。那麼爲什麼不這樣做呢?

+0

你怎麼稱呼它? – billz

+0

@billz'add(5,5)' –

回答

3

您不能使用參數作爲默認值。此外,模板類型扣除不會這樣工作。

只要寫這樣的:

template <typename A, typename B> 
auto add(A a, B b) -> decltype(a + b) { 
    return a + b; 
} 

並希望C++得到很快返回類型推演。

+0

我是否總是必須使用decltype,我在哪裏自動執行函數? –

+0

decltype(a + c)中的'c'是否是一個錯字? –

+1

@David,只有當你無法預測表達式的結果類型時,就像涉及模板參數的表達式那樣。你不可能知道這些參數是'float','int's,兩者的混合還是其他。 – jweyrich

相關問題