在函数内使用裸括号是一个好习惯吗?

the*_*sys 5 c++ scope

从技术上讲,在 C++ 中,我们可以使用大括号来声明新的作用域。例如在这个函数中,它交换两个数字

void swap_int(int& first, int& second)
{
   int temp = first;
   first = second;
   second = temp;
}
Run Code Online (Sandbox Code Playgroud)

我们还可以temp在它自己的块内声明:

void swap_int(int& first, int& second)
{
   // Do stuf...
   {
      int temp = first;
      first = second;
      second = temp;
   }
   // Do other stuff...
}
Run Code Online (Sandbox Code Playgroud)

这样做显然有一个好处,就是temp不再需要的时候就直接删除。

但是,在我编写的代码中我从未使用过它。另外,在第三方库的代码中我几乎从未见过它。

为什么不公开使用?它是否会带来任何性能提升,或者只是意味着额外的打字工作?

Cor*_*lks 1

有时这是一个很好的做法(尽管我不喜欢这个词,因为它是主观的并且特定于上下文),但就像生活中的许多事情一样,将其走向极端(在光谱的任一端)都是一个坏主意。

您有时会看到 C++ 中引入的新作用域,其中RAII很重要,例如处理线程锁时时。有时,对象创建和销毁的精确时刻非常重要,需要控制。在这些情况下,引入新的作用域是实现这一目标的一种非常有用且常用的方法。

但这种情况并不常见。我们(广泛的编程社区)使用的大多数对象没有需要如此仔细管理的严格生命周期。因此,不值得任意引入新的作用域来管理那些生命周期不值得进行微观管理的对象的生命周期。

如果这样做,就会降低信噪比,人们将很难分辨哪些示波器是为了仔细控制重要资源而引入的,哪些示波器不是。这使得在跨团队重构或开发代码时很容易引入错误。至少,你会让编程变得更加乏味,这很糟糕,如果可以的话,你通常应该避免这样做,否则暴力的精神病患者可能会向你出气