判断(switch和if)

  1. if(a=b)

如果b的值为0,那么a=b的值就为0,if里面判断的值就是false

  1. if else成对出现

思考

if(a==1)
    if(b==2) std::cout,<<"b-2";
else
    std::cout<

当a为2时,这里输出什么

这里什么都不输出

解析:因为if和else是一对的

if里面的数值

if(a&&b)相当于a!=0&&b!=0

if(!a)相当于if(a==0)

思考

下面哪种写法更好

bool  a {500};
int c {100};
if((c*100+c++)&&a)  //写法1
{
    ...
}
//写法2
// if(a&&(c*100+c++)) 
//{
//    ...
//}

第二种更好

因为如果a是false,第二种后面的代码就不用执行了,而第一种方法c*100+c++还要执行一次

if临时变量的声明

if(条件)
{
    临时变量
}
else
{
    临时变量
}

缺点:如果要使用同一个临时变量,就要声明两次

++17新语法

if(变量声明;条件)
{

}
else
{

}

这里声明一次变量,if和else中都能使用

特别注意*:这里的变量声明只能声明一种类型的变量

switch临时变量的声明

switch 3
{
    case 2:
        int a=9;
        break;
    case 3:
        break;
}

特别注意*:每次用完case 后,要记得用break,不然程序就会执行到下一个case

这种声明临时变量的方式是错误的,因为a生命周期在括号内有效,当switch选择的是3,就跳过了a的初始化,但是a又是有效的,这就产生了矛盾,解决方式就是在case 2下面把语句块括起来

C++17新语法

switch (变量声明;值)
{
    case 2:
        int a=9;
        break;
    case 3:
        break;
}

if和switch比较

if (a == 500)
00E915F1  cmp         dword ptr [a],1F4h  
00E915F8  jne         main+50h (0E91610h)  
    
00E9160E  jmp         main+82h (0E91642h)  
else if (a == 600)
00E91610  cmp         dword ptr [a],258h  
00E91617  jne         main+6Fh (0E9162Fh)  
 
00E9162D  jmp         main+82h (0E91642h)  

if底层是用了cmp指令,每次用if都要用一次cmp指令,cmp指令是用来比较的

switch (a)
00E91642  mov         ecx,dword ptr [a]  
00E91645  mov         dword ptr [ebp-10h],ecx  
00E91648  cmp         dword ptr [ebp-10h],1F4h  
00E9164F  je          main+9Ch (0E9165Ch)  
00E91651  cmp         dword ptr [ebp-10h],258h  
00E91658  je          main+0B2h (0E91672h)  
00E9165A  jmp         main+0C7h (0E91687h)  
    {
        case 500:
            std::cout << "a=500";
00E9165C  push        0E98D30h  
00E91661  mov         edx,dword ptr [__imp_std::cout (0E9C0CCh)]  
00E91667  push        edx  
00E91668  call        std::operator<< > (0E9129Eh)  
00E9166D  add         esp,8  
            break;
00E91670  jmp         main+0DBh (0E9169Bh)  

switch底层原理是提前把所有选项放在一个表里面,然后去查这个表,查到了对应数值之后,会给一个内存地址 ,直接跳转到这个选项,如果有许多个选项,用switch,效率更高

你可能感兴趣的:(c++)