代码 -
uint32 MagicNumber;
*LocalFileAr << MagicNumber;
uint32 FileVersion;
*LocalFileAr << FileVersion;
if ((MagicNumber == LocalFileReplay::FileMagic) && (FileVersion == LocalFileReplay::FileVersion))
{
由于vars MagicNumber和FileVersion刚刚定义,它们应该是0是吗? 0左移位的目的是什么? 为什么在if语句中MagicNumber和FileVersion的值不为零?
答案 0 :(得分:5)
MagicNumber
和FileVersion
的值未知,因为您尚未初始化它们。正式地,读取未初始化的uint32
的行为是 undefined (唯一不能包含陷阱表示的类型是unsigned char
)。
并且,假设<<
没有重载,使用移位量大于31的<<
的行为未定义。