2012-07-31 26 views
6

當我爲小型數學向量實現模板類時,遇到一個問題。 對於算術運算,返回類型T1 lhs + T2 rhsstd::common_type<T1, T2>::type. 但是以下返回類型是什麼(例如T1 signed和T2 unsigned或相反,或者T1 char和T2 unsigned long long int等等):C++中按位運算符的返回類型

T1 lhs & T2 rhs ? 
T1 lhs | T2 rhs ? 
T1 lhs^T2 rhs ? 
T1 lhs << T2 rhs ? 
T1 lhs >> T2 rhs ? 

非常感謝。

+0

'decltype(lhs&rhs)'等? – 2012-07-31 18:06:05

+3

您是否知道在簽名值上執行按位函數時固有的缺陷? – 2012-07-31 18:06:54

+0

你想通過編程獲得它還是想知道它?在後一種情況下,用一個參數聲明(但不定義)模板函數,並用表達式調用它。編譯器會告訴你錯誤信息中的類型 – 2012-07-31 18:10:43

回答

4

我假設你要實現向量上的一個compoment-wise按位運算。本質上按位運算是整數運算,我看不到爲什麼不把它們的結果作爲std::common_type<T1, T2>::type

移位的結果不依賴於右操作數。只需使用T1即可。

+0

因爲換檔的結果不取決於右側。 – 2012-07-31 18:07:13

+0

@ R. Martinho Fernandes:我已經更新了我的答案。 – 2012-07-31 18:08:33