为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
青春有我 2019-12-17 10:47:45
今天在为一位同事进行代码审查时,我看到了一件奇怪的事情。他用如下花括号将新代码括起来: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来看,这似乎很奇怪,我认为花括号不应该放在我们的代码中。我在所有答案中都看到了一些很好的示例,说明了为什么可以用花括号将代码括起来,但是您是否不应该将代码分成方法呢?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

有时会很不错,因为它为您提供了一个新的作用域,您可以在其中更“干净地”声明新的(自动)变量。

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

由于C++具有析构函数,因此在范围退出时自动释放资源(文件,互斥对象等)也很方便,这可以使事情变得更整洁。这意味着您可以比在方法开始时获取共享资源的时间短。


查看完整回答
反对 回复 2019-12-17
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-12-17
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

多余的花括号用于定义在花括号内声明的变量的范围。这样做是为了在变量超出范围时调用析构函数。在析构函数中,您可以释放互斥锁(或任何其他资源),以便其他人可以获取它。


在生产代码中,我写了这样的东西:


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 在一个函数中使用它,同时可以通过使用额外的花括号来定义其范围。这样可以确保即使多余括号外的代码可以同时由多个线程执行,括号内的代码一次也只能由一个线程执行。


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 461 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信