C ++中不必要的花括号?

今天在为一位同事进行代码审查时,我看到了一件奇怪的事情。他用如下花括号将新代码括起来:


Constructor::Constructor()

{

   existing code


   {

      New code: do some new fancy stuff here

   }


   existing code

}

这样做的结果是什么?这样做的原因可能是什么?这个习惯从哪里来?


编辑:


基于输入和下面的一些问题,即使我已经标记了答案,我仍必须在问题中添加一些内容。


该环境是嵌入式设备。有很多用C ++语言编写的遗留C代码。有很多C语言转换的C ++开发人员。


在代码的这一部分中没有关键部分。我仅在代码的这一部分中看到过它。没有完成主要的内存分配,仅设置了一些标志,并且有些混乱。


花括号包围的代码是这样的:


{

   bool isInit;

   (void)isStillInInitMode(&isInit);

   if (isInit) {

     return isInit;

   }

}

(不用管代码,只是坚持使用大括号...;)在大括号之后,还有更多的旋转,状态检查和基本的信号传递。


我和那个家伙谈过,他的动机是限制变量的范围,命名冲突以及其他一些我无法真正理解的东西。


从我的POV来看,这似乎很奇怪,我认为花括号不应该放在我们的代码中。我在所有答案中都看到了一些很好的示例,说明了为什么可以用花括号将代码括起来,但是您是否不应该将代码分成方法呢?


青春有我
浏览 462回答 3
3回答

缥缈止盈

有时会很不错,因为它为您提供了一个新的作用域,您可以在其中更“干净地”声明新的(自动)变量。在C++这也许不那么重要,因为你可以在任何地方引入新的变量,但也许是习惯是C,你不能这样做,直到C99。:)由于C++具有析构函数,因此在范围退出时自动释放资源(文件,互斥对象等)也很方便,这可以使事情变得更整洁。这意味着您可以比在方法开始时获取共享资源的时间短。

牧羊人nacy

一种可能的目的是控制可变范围。并且由于具有自动存储的变量在超出范围时会被破坏,因此这也可以使析构函数的调用早于其他方式。

猛跑小猪

多余的花括号用于定义在花括号内声明的变量的范围。这样做是为了在变量超出范围时调用析构函数。在析构函数中,您可以释放互斥锁(或任何其他资源),以便其他人可以获取它。在生产代码中,我写了这样的东西:void f(){   //some code - MULTIPLE threads can execute this code at the same time   {       scoped_lock lock(mutex); //critical section starts here       //critical section code       //EXACTLY ONE thread can execute this code at a time   } //mutex is automatically released here  //other code  - MULTIPLE threads can execute this code at the same time}如您所见,通过这种方式,您可以scoped_lock 在一个函数中使用它,同时可以通过使用额外的花括号来定义其范围。这样可以确保即使多余括号外的代码可以同时由多个线程执行,括号内的代码一次也只能由一个线程执行。
打开App,查看更多内容
随时随地看视频慕课网APP