代码 -
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的值不为零?
您尚未初始化它们的值MagicNumber和FileVersion未知值.正式地,读取未初始化的行为uint32是未定义的(唯一不能包含陷阱表示的类型是a unsigned char).
并且,假设<<没有重载,则使用<<移位量大于31的行为是未定义的.