我有一个用 Visual Studio 2010 开发的 C++ 应用程序。我有一个静态方法,调用它来解码通过串行硬件接收到的消息。
当我使用“发布”配置时,编译器以某种奇怪的方式优化了该方法,并且该方法无法按预期工作。当我使用“调试”配置时,一切都很好。
这是方法:
std::vector<BYTE> CMsg::DecodeMsg(std::vector<BYTE> & msg)
{
std::vector<BYTE> asciiDecoded;
for (size_t i = 0; i < msg.size() - 1; i++)
{
auto val2 = BaseUtils::hex2Ascii(msg.at(i++), msg.at(i));
asciiDecoded.push_back(val2);
}
return asciiDecoded;
}
我认为发布配置中的一些优化(我使用 /O2)导致 i 变量出现问题。