为什么我的程序同时进入if语句和相应的else语句?

时间:2013-04-30 17:26:14

标签: c++ visual-studio-2010 debugging if-statement

在我的计划的一部分,我有代码:

    if(cameraName == L"AVT Prosilica GT2750") {
        mCamera = new camera_avtcam_ex_t();
    } else if(cameraName == L"QImaging Retiga 2000R\\4000R") {
        mCamera = new camera_qcam_ex_t();
    }

当我设置我的程序以使cameraName默认为L“AVT Prosilica GT2750”(我的调试器会将其显示为它的值)时,它进入if语句并运行mCamera = new camera_avtcam_ex_t();,但随后当我走到下一个执行行时,我的调试器直接跳到行mCamera = new camera_qcam_ex_t();并执行它。鉴于if / else语句的性质,怎么可能发生这种情况?

注意:如果我用一个简单的else语句替换else,则会看到相同的行为。

1 个答案:

答案 0 :(得分:3)

由于尝试调试版本构建

,您看到了这一点

尝试调试“debug”构建。你应该看到你期望的行为。在调试优化构建时,行不一定与源代码“对齐”。众所周知,优化器决定最好执行这两个,如果不需要则抛出一个。

注意 - 我不是建议优化器确实这样做,我只是说这是可能的,你可能实际上看到下一步正在执行什么行。优化器可以自由地重新排序代码,展开循环,传播常量,删除变量添加临时值等等。

编辑 - 其他想法
当你达到硬件水平时,事情可以真正重新排序。在确定应该采取哪一个之前,硬件可以选择执行分支的两侧,以便在需要时立即准备好答案。它会这样做,即使这意味着抛弃其他工作,因为这可能会更快地执行。