看似没啥作用的花括号,其实也有用处的。

今天在研究别人的代码,发现有处代码感觉有点冗余,好像有点多余,正想删除,

但仔细一看,这样写也是有目的。

 

比如说如下代码

 

 



//.....

mInit = false;
CallFun();

{
    CTest a;
    mClose = 1;
    mOpenFile = 100;
}

CallFun33();

//....

 

从逻辑角度来看,{  } 里的代码是100%会被执行到

就算没有 { },也是一样会执行到

 

这样的代码,往往第一感觉,这里以前应该有条件的,然后因为某种原因去掉这个条件,而忘记删除 {  }

 

但事实上不是这样的!这里去掉 { } 跟 不去掉,效果是不一样的。

 

对比下以下两段代码:

class CuteHaha
{
private:
    
public:
    CuteHaha();
    ~CuteHaha();
};

CuteHaha::CuteHaha()
{
    printf("create it\n");
}

CuteHaha::~CuteHaha()
{
    printf("delete it\n");
}


int main(int argc, char *args[])
{
    int i, j; 
    printf("hello world!\n");

    {
        CuteHaha a;
    }   
    
    printf("hello run last!\n");
    ///getchar();
    return 0;
}

这个会怎么打印呢?

如果去掉 { } 又会怎么打印?

class CuteHaha
{
private:
    
public:
    CuteHaha();
    ~CuteHaha();
};

CuteHaha::CuteHaha()
{
    printf("create it\n");
}

CuteHaha::~CuteHaha()
{
    printf("delete it\n");
}


int main(int argc, char *args[])
{
    int i, j; 
    printf("hello world!\n");

    CuteHaha a; 
    
    printf("hello run last!\n");
    ///getchar();
    return 0;
}

 

第一段,实际结果:

hello world

create it

delete it

hello run last

第二段,实际结果:

hello world

create it

hello run last

delete it

 

差别是delete it 跟 hello run last 反了一下

 

这样有什么巧妙用途呢?

还别说,真有!

比如说 构造函数 会new 然后在 析构函数 里 delete

这样就作用范围不一样;

再比如说,构造函数 加锁,然后在析构函数里 释放锁  

这样,锁的作用范围也有所不同,good idea

 

 

C++无穷无尽,真是活到老学到老

 

 

 

 

 

 

 

posted @ 2021-04-28 19:45  小刚学长  阅读(18)  评论(0编辑  收藏  举报