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

6

我正在实现小型数学向量的模板类,遇到了一个问题。对于算术运算,T1 lhs + T2 rhs 的返回类型是 std::common_type<T1, T2>::type. 但是对于以下情况(例如 T1 为有符号整数,T2 为无符号整数或反之亦然,或者 T1 为字符,T2 为无符号长整型等等...),下面的代码应该返回什么类型呢?

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

非常感谢你。

3
你是否意识到在有符号值上执行位运算的潜在问题? - Ed S.
你想以编程方式获取它还是只是想知道它?如果是后者,请声明(但不定义)一个带有单个参数的模板函数,并使用表达式调用它。编译器将在错误消息中告诉您类型。 - David Rodríguez - dribeas
除非我非常错误(我确实可以,哦是的),否则<<>>仅取决于lhs的类型。(对于内置类型而言。) - Mr Lister
1个回答

4

我猜你想在向量上实现逐分量按位操作。基本上,按位操作是整数操作,我认为使用std::common_type<T1, T2>::type作为它们的结果是毫无问题的。

移位操作的结果并不依赖于右操作数。只需使用T1即可。


1
由于移位的结果不取决于右侧。 - R. Martinho Fernandes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接