C++中按位运算符的返回类型

问题描述:

当我为小型数学向量实现模板类时,遇到一个问题。 对于算术运算,返回类型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

我假设你要实现向量上的一个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