跳转至

12 C++条件与分支(if语句)

if statements

==equality运算符,标准库中实现的,将两个整数的四个字节抓出来逐位比较。

1. Disassembly

Debug 模式下调试时,右键或 Ctrl+K,G 即可调出 Go to disaseembly

jne(jump not equal),如果不相等就跳转

00C8601E  mov         dword ptr [ebp-0DCh],0  ; boolean被赋值0(false)

如果00C86035 test eax,eax成功,即 test 操作是 true,则会执行je(jump equal),则会跳转到 cin.get()那句

2. Constant folding (常数折叠)

编译器最佳化技术。会把这些都转到一个常变量中,因为这些常量都会在编译时被知晓。然后编译时直接去掉 if 等部分,直接跳到 cin.get()

所以要在 Debug 模式下操作。

可以写成

if (x==5)
    Log("Hello World")   //如果在同一行不方便打断点

3. if else

const char* ptr = "Hello";
if (ptr)
    Log(ptr);
else if (ptr == "Hello")
    Log("ptr is Hello");

只有在 if 失败的情况下,才执行 else 后的代码,即只有 ptr 为 false,才执行 else if..... 原因如下

else if 就是一个 else 和 if

else if (ptr == "Hello")
    Log("ptr is Hello");

//等价于

else
{
    if (ptr == "Hello")
        Log("ptr is Hello");
}

编程=数学部分+逻辑部分 ^2780f2

可能会用某些运算来代替比较和分支,让代码更快更实用。