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

时间:2018-06-05 08:02:33

标签: c++

代码 -

    uint32 MagicNumber;
    *LocalFileAr << MagicNumber;

    uint32 FileVersion;
    *LocalFileAr << FileVersion;

    if ((MagicNumber == LocalFileReplay::FileMagic) && (FileVersion == LocalFileReplay::FileVersion))
    {

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

1 个答案:

答案 0 :(得分:5)

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

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