如何獲得兩個操作數的提升類型?獲得提升類型
這可能會爲代碼是有用的是這樣的:
template <typename LHS, typename RHS>
bool would_overflow_upon_addition (LHS lhs, RHS rhs) {
return lhs > std::numeric_limits<promoted<LHS,RHS>::type>::max()-rhs;
}
如何獲得兩個操作數的提升類型?獲得提升類型
這可能會爲代碼是有用的是這樣的:
template <typename LHS, typename RHS>
bool would_overflow_upon_addition (LHS lhs, RHS rhs) {
return lhs > std::numeric_limits<promoted<LHS,RHS>::type>::max()-rhs;
}
common_type
應該是你的答案:
#include <type_traits>
typedef std::common_type<LHS, RHS>::type ctype;
...我在我的個人代碼庫中實際上有這樣的東西,甚至用這種方式調用它,所以facepalm。它在語義上與'decltype(lhs + rhs)'不同嗎? –
@phresnel:對於基本算術類型是一樣的。 –
這其實是簡單的比人們想象的:
template <typename LHS, typename RHS>
bool would_overflow_upon_addition (LHS lhs, RHS rhs) {
return lhs > std::numeric_limits<decltype(lhs+rhs)>::max()-rhs;
}
decltype(X)
不評估,只是靜態類型的X
推導*
*所以不會發生「編譯時溢出」或「編譯時間不確定,行爲」
作爲brainfart的結果,我實際上是在尋找解決錯誤問題的方法,所以我認爲這也可能發生在其他人身上。 (請參閱我給出的另一個答案的修訂歷史記錄:http://stackoverflow.com/posts/12675321/revisions) –
突然激增的「博客帖子」問題是怎麼回事?昨天大家都想打造一個外殼,今天大家都在發帖子問題... –
@KerrekSB:這是星期一。我們還沒有開啓rev。而星期天是當夢想成真。任何shell的東西的例子? –