移位操作符在类方面的用法

Shift operator usage in terms of classes

本文关键字:方面 用法 位操作 操作符      更新时间:2023-10-16

我有这行c++代码,不知道移位操作符是做什么的:

vRecv >> locator >> hashStop

标识符的类型如下:

  • vRecv: CDataStream CNetMessage::vRecv, CDataStream类的实例和CNetMessage类的公共属性
  • 定位器:CBlockLocator locator, CBlockLocator结构体的实例
  • hashStop: uint256 hashStop, instance of uint256 class

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

看一下比特币文档。vRecvCDataStream的一个实例,它重载操作符>>来读取和反序列化数据。

要理解表达式,操作符的优先级和结合性很重要。在c++中,>>运算符是左结合的,这意味着您可以重写表达式

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

查看操作符>>的代码,可以看到该方法接受一个T类型的参数,并返回对自身的引用。在你的特殊情况下,参数是CBlockLocator的一个实例(uint256元素的STL向量)。注意,operator>>调用了Unserialize,它有效地从流中读取字节。因此,

(vRecv >> locator)

vRecv流中读取字节到locator对象中,返回相同的流,这意味着接下来执行

vRecv >> hashStop

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