【问题标题】:Return type of bitwise operators in C++C++ 中按位运算符的返回类型
【发布时间】:2012-07-31 18:01:37
【问题描述】:

当我为小型数学向量实现模板类时,我遇到了一个问题。 对于算术运算,T1 lhs + T2 rhs 的返回类型为std::common_type<T1, T2>::type. 但是以下的返回类型是什么(例如 T1 signed 和 T2 unsigned 或相反,或 T1 char 和 T2 unsigned long long int 等......):

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

非常感谢。

【问题讨论】:

  • 您知道对有符号值执行按位函数所固有的缺陷吗?
  • 您想以编程方式获取它还是想知道它?在后一种情况下,声明(但不定义)具有单个参数的模板函数并使用表达式调用它。编译器会告诉你错误信息中的类型
  • 除非我弄错了(我可能是,哦,是的)&lt;&lt;&gt;&gt; 仅取决于 lhs 的类型。 (对于内置类型,就是这样。)

标签: c++ types operators


【解决方案1】:

我假设您要对向量实现逐位运算。基本上按位运算是整数运算,我认为没有理由不将其结果设为std::common_type&lt;T1, T2&gt;::type

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

【讨论】:

  • 因为移位的结果不依赖于右手边。
猜你喜欢
  • 2013-07-22
  • 2021-02-20
  • 1970-01-01
  • 2022-03-19
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多