我发现以下代码在调试版本中正常工作,但在发布时不正确:
enum FileFormatDetection
{
Binary,
ASCII,
Auto
};
FileFormatDetection detection_mode = (FileFormatDetection)ReadIntKey(NULL, KEY_ALL, "FIL_ASCIIORBINARY", -1); // Assigns -1, as confirmed by debug output
if (detection_mode < 0 || detection_mode > 2)
{
// Not a valid value, so set to default:
detection_mode = Auto;
}
在每个构建中,调试输出确认该值为 -1。在调试版本中,值 -1 导致输入 if-branch;在发布时,它没有。
我尝试将 detection_mode 转换为 int,如下所示:
if ((int)detection_mode < 0 || (int)detection_mode > 2)
和:
if (int(detection_mode) < 0 || int(detection_mode) > 2)
但两者都没有任何区别。
我可以完成这项工作的唯一方法是将枚举变量转换为整数堆栈变量并测试:
int detection_int = (int)detection_mode;
if (detection_int < 0 || detection_int > 2)
{
...
现在按预期输入了 if 分支。
我不明白为什么这是必要的——我仍然认为原始代码(或至少测试临时演员)应该有效。谁能解释为什么没有?