左移0点是什么意思?

时间:2017-01-24 19:30:57

标签: c++

我目前正在尝试为开源服务器实施Google身份验证器,并且他们有一小段代码

  if (securityFlags & 0x01)               // PIN input
                {
                    pkt << uint32(0);
                    pkt << uint64(0) << uint64(0);      // 16 bytes hash?
                    // This triggers the 2 factor authenticator entry to popup on the client side

                }

                if (securityFlags & 0x02)               // Matrix input
                {
                    pkt << uint8(0);
                    pkt << uint8(0);
                    pkt << uint8(0);
                    pkt << uint8(0);
                    pkt << uint64(0);
                }

                if (securityFlags & 0x04)               // Security token input
                {
                    pkt << uint8(1);
                }

我只想弄清楚他们使用pkt << uint32(0)的原因,因为它们对我来说似乎完全是多余的。而且他们也经常使用它,这就更没意义了。

为什么他们的代码是这样写的?

2 个答案:

答案 0 :(得分:11)

运营商LT;&LT;为ByteBuffer重载(这是一个pkt类型),它看起来如下:

https://github.com/mangostwo/server/blob/b8ce9508483375a36699c309bce36810c4548007/src/shared/ByteBuffer.h#L138

    ByteBuffer& operator<<(uint8 value)
    {
        append<uint8>(value);
        return *this;
    }

所以它不是偏移0,而是附加值0。

答案 1 :(得分:1)

pkt可能属于重载operator<<的类类型;如果不是这样,所有这些陈述都没有效果,因为它的结果没有被使用。 (pkt << 0而非pkt <<= 0)。