我在Windows XP上遇到了一些奇怪的行为。我使用Visual Studio 2017在Windows 10上编译我的项目。当我编译各个源时,我将/D_WIN32_WINNT=0x0501
传递给cl
,以确保我的程序在XP上运行。
但是,当我尝试在XP上运行它时,我在以下代码中遇到了一个奇怪的崩溃(它没有使用任何Windows API,FWIW):
void CPDF_StreamContentParser::OnOperator(const CFX_ByteStringC& op) {
static const OpCodes s_OpCodes = InitializeOpCodes();
auto it = s_OpCodes.find(op.GetID());
if (it != s_OpCodes.end())
(this->*it->second)();
}
在Windows 7和10上,代码运行正常,但在XP上它崩溃了。经过一些调试后,我发现static
是罪魁祸首。将第2行更改为此内容会使崩溃消失,并且XP上的一切正常:
/*static*/ const OpCodes s_OpCodes = InitializeOpCodes();
但对我来说,static
在这里应该是一个问题并没有任何意义。有没有人解释为什么代码在使用static
时在XP上崩溃并在省略static
时工作正常?这对我没有意义。
FWIW,InitializeOpCodes()
声明如下:
using OpCodes = std::map<uint32_t, void (CPDF_StreamContentParser::*)()>;
static OpCodes InitializeOpCodes();
感谢您的帮助!