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来看,这似乎很奇怪,我不认为花括号应该在我们的代码中。 我在所有答案中都看到了一些很好的例子,说明为什么可以用大括号括起代码,但是不应该将代码分离成方法吗?


有时候它很好,因为它给了你一个新的范围,你可以更“干净地”声明新的(自动)变量。

C++这可能不是那么重要,因为你可以在任何地方引入新的变量,但是习惯是从C ,在C99之前你不能这样做。 :)

由于C++具有析构函数,因此在范围退出时自动释放资源(文件,互斥锁等)也很方便,这可以使事情更加简洁。 这意味着您可以在一段较短的持续时间内保留一些共享资源,而不是在方法开始时抓取它。


一个可能的目的是控制变量作用域。 由于具有自动存储的变量在超出范围时被销毁,这也可以使析构函数早于其他方式被调用。


额外的大括号用于定义大括号内声明的变量的范围。 这样做是为了在变量超出范围时调用析构函数。 在析构函数中,你可以释放一个互斥体(或任何其他资源),以便其他人可以获得它。

在我的生产代码中,我写了这样的内容:

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 ,同时可以使用额外的大括号来定义它的作用域。 这可以确保即使额外花括号外的代码可以同时由多个线程执行,花括号内的代码也会一次只执行一个线程

链接地址: http://www.djcxy.com/p/25441.html

上一篇: Unnecessary curly braces in C++?

下一篇: NetBeans, Turn off **ANY** auto indentation / auto formatting