我有这行C ++代码,并且不知道移位运算符的作用:
vRecv >> locator >> hashStop
标识符具有以下类型:
CDataStream CNetMessage::vRecv
,CDataStream类的实例和CNetMessage类的公共属性CBlockLocator locator
,CBlockLocator struct的实例uint256 hashStop
,uint256类的实例在这种情况下,对我来说重要的是什么?
答案 0 :(得分:0)
看看BitCoin documentation。 vRecv
是CDataStream
的一个实例,它会重载operator>>以读取和反序列化数据。
<强>背景强>
要理解表达式,运算符的precedence和associativity很重要。在C ++中,>>
运算符为left-associative,这意味着您可以重写表达式
(vRecv >> locator) >> hashStop;
// Or in terms of actual function calls...
( vRecv.operator>>(locator) ).operator>>(hashStop);
<强>解释强>
查看code for the operator>>,您会看到该方法采用类型为T
的参数,并返回对自身的引用。在您的特定情况下,参数是CBlockLocator(STL vector个uint256个元素的实例)。请注意,operator>>
调用Unserialize可以有效地从流中读取字节。
因此
(vRecv >> locator)
将vRecv
流中的字节读入您的locator
对象,返回相同的流意味着下一步执行
vRecv >> hashStop
使流将字节读入hashStop
对象。所以,长话短说:用流中的字节填充locator
和hashStop
个对象。