gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:55:35 25 4
gpt4 key购买 nike

在我的部分程序中,我有代码:

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

最佳答案

您看到这个是因为尝试调试发布版本

尝试调试“调试”版本。您应该看到您期望的行为。在调试优化构建时,这些行不一定与源代码“对齐”。如您所知,优化器决定最好同时执行这两个,如果不需要则丢弃一个。

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

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

关于c++ - 为什么我的程序同时进入 if 语句和相应的 else 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com