按类别转换运算符用法

时间:2015-06-04 12:46:55

标签: c++ bit-shift bitcoin

我有这行C ++代码,并且不知道移位运算符的作用:

vRecv >> locator >> hashStop

标识符具有以下类型:

  • vRecv:CDataStream CNetMessage::vRecv,CDataStream类的实例和CNetMessage类的公共属性
  • locator:CBlockLocator locator,CBlockLocator struct的实例
  • hashStop:uint256 hashStop,uint256类的实例

在这种情况下,对我来说重要的是什么?

1 个答案:

答案 0 :(得分:0)

看看BitCoin documentationvRecvCDataStream的一个实例,它会重载operator>>以读取和反序列化数据。

<强>背景

要理解表达式,运算符的precedenceassociativity很重要。在C ++中,>>运算符为left-associative,这意味着您可以重写表达式

(vRecv >> locator) >> hashStop;

// Or in terms of actual function calls...
( vRecv.operator>>(locator) ).operator>>(hashStop);

<强>解释

查看code for the operator>>,您会看到该方法采用类型为T的参数,并返回对自身的引用。在您的特定情况下,参数是CBlockLocatorSTL vectoruint256个元素的实例)。请注意,operator>>调用Unserialize可以有效地从流中读取字节。

因此

(vRecv >> locator)

vRecv流中的字节读入您的locator对象,返回相同的流意味着下一步执行

vRecv >> hashStop

使流将字节读入hashStop对象。所以,长话短说:用流中的字节填充locatorhashStop个对象