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

Why is my program going into both an if statement AND its corresponding else statement?

本文关键字:语句 else if 程序 我的 为什么      更新时间:2023-10-16

在我的程序中,我有以下代码:

    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 If,会看到相同的行为

您正在尝试调试一个发布版本

尝试调试"debug"构建。你应该看到你所期待的行为。当调试一个优化的构建时,代码行不一定与源代码"对齐"。据你所知,优化器决定最好同时执行这两个命令,如果不需要,就把其中一个丢弃。

注意-我并不是说优化器确实这样做了,我只是说这是可能的,你可能会看到接下来执行的是哪一行。优化器可以自由地对代码重新排序、展开循环、生成常量、删除变量、添加临时变量等等。

编辑-附加想法
当你深入到硬件层面时,事情就会重新排序。硬件可能会选择执行分支的两个方面,然后再确定应该执行哪一个,以便在需要时尽快准备好答案。它会这样做,即使这意味着放弃其他工作,因为这可能会获得更快的执行速度。