看似没啥作用的花括号,其实也有用处的。
今天在研究别人的代码,发现有处代码感觉有点冗余,好像有点多余,正想删除,
但仔细一看,这样写也是有目的。
比如说如下代码
//.....
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++无穷无尽,真是活到老学到老
满屏源代码,一把辐射泪,都云编程痴,谁解其中味!