为什么这个代码比特移位0然后进行比较?

Fle*_*tch -5 c++

代码 -

    uint32 MagicNumber;
    *LocalFileAr << MagicNumber;

    uint32 FileVersion;
    *LocalFileAr << FileVersion;

    if ((MagicNumber == LocalFileReplay::FileMagic) && (FileVersion == LocalFileReplay::FileVersion))
    {
Run Code Online (Sandbox Code Playgroud)

由于变量MagicNumber和FileVersion刚刚定义,它们应该是0是吗?0左移位的目的是什么?为什么在if语句中MagicNumber和FileVersion的值不为零?

Bat*_*eba 5

您尚未初始化它们的值MagicNumberFileVersion未知值.正式地,读取未初始化的行为uint32未定义的(唯一不能包含陷阱表示的类型是a unsigned char).

并且,假设<<没有重载,则使用<<移位量大于31的行为是未定义的.

  • 而且我很确定这个`<<`被重载以执行序列化.这看起来非常像Boost.Serialization代码. (2认同)