簡體   English   中英

為什么我的程序同時進入if語句和相應的else語句?

[英]Why is my program going into both an if statement AND its corresponding else 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();下一個執行行時,我的調試器直接跳到行mCamera = new camera_qcam_ex_t(); 並執行它。 鑒於if / else語句的性質,怎么可能發生這種情況?

注意:如果我用一個簡單的else語句替換else,則會看到相同的行為。

由於嘗試調試發布版本,您看到了這一點

嘗試調試“debug”構建。 你應該看到你期望的行為。 在調試優化構建時,行不一定與源代碼“對齊”。 眾所周知,優化器決定最好同時執行這兩個並在不需要的情況下扔掉一個。

注意 - 我不是建議優化器確實這樣做,我只是說這是可能的,你可能實際上看到下一步正在執行什么行。 優化器可以自由重新排序代碼,展開循環,傳播常量,刪除變量添加臨時值等,等等。

編輯 - 其他想法
當你達到硬件水平時,事情可以真正重新排序。 在確定應該采取哪一個之前,硬件可以選擇執行分支的兩側,以便在需要時立即准備好答案。 它會這樣做,即使這意味着拋棄其他工作,因為這可能會產生更快的執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM