2011-11-19 46 views
0

可能重複:
Why is this 「min」 template of cpp-next at fault?如何在編譯時確定這種返回類型?

從另一個問題,我得到這個函數模板:

template <class T, class U> 
auto min(T x, U y) -> decltype(x < y ? x : y) { 
    return x < y ? x : y; 
} 

它編譯並似乎很好地工作,但我不確定爲什麼有用。如何在編譯時推導返回類型? —我認爲它可以是TU,具體取決於哪個參數較小,並且只能在運行時確定。

+2

您的「問題」可能是一個評論:http://stackoverflow.com/questions/8195150/why-is-this-min-template-of-cpp-next-at-fault – FailedDev

+1

@FailedDev爲什麼isn'這本身就是個好問題嗎?我的問題是關於它是如何工作的,這似乎是關於函數實現中的微妙錯誤。完全不同...... –

+2

表達式的類型'x

回答

2

無論a是否爲真值,a ? b : c形式的表達式總是返回相同的類型。如果bc屬於不同類型,則會發生類型提升,就像3 + 4.2的計算結果爲7.2(通過double(3) + 4.2)一樣。