移位操作符在类方面的用法
Shift operator usage in terms of classes
我有这行c++代码,不知道移位操作符是做什么的:
vRecv >> locator >> hashStop
标识符的类型如下:
- vRecv:
CDataStream CNetMessage::vRecv
, CDataStream类的实例和CNetMessage类的公共属性 - 定位器:
CBlockLocator locator
, CBlockLocator结构体的实例 hashStop:
uint256 hashStop
, instance of uint256 class在这种情况下,什么对我来说是重要的?
看一下比特币文档。vRecv
是CDataStream
的一个实例,它重载操作符>>来读取和反序列化数据。
要理解表达式,操作符的优先级和结合性很重要。在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
对象。所以,长话短说:用流中的字节填充locator
和hashStop
对象。
相关文章:
- 这个指针在c++中的用法
- GCC和Clang在与__builtin_constant_p相关的static_assert方面有所不同
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- 省略号在C++中的所有用法
- () 在 C++ 11 中的特殊而奇怪的用法?
- 构造函数的用法
- 模板类中自动的类用法不完整
- 这里的 = 运算符有什么用法?
- 为什么我的代码在指针方面停止运行?
- 你如何使std::变体的使用更"palatable",语法方面?
- 我需要 c++ 结构方面的帮助
- 我需要 c++ 结构方面的帮助
- 什么模板用法在阶乘中更好
- 如果可变长度元素的constexpr用法得到<>
- 为什么 setjmp/longjmp 的这种用法是未定义的行为?
- 移位操作符在类方面的用法