范围内的范围,做或不做?

3 c++ scope dos-donts

虽然下面的例子编译得很好,除了错误的最后一行,我想知道范围内这个'范围'的来龙去脉?也是这个术语,如果有的话.

考虑这些括号:

void func()
{

    int i = 0;

    { // nice comment to describe this scope

        while( i < 10 )
            ++i;

    }

    { // nice comment to describe this scope

        int j= 0;
        while( j< 10 )
            ++j;

    }

    i = 0; // OK
    // j = 0; // error C2065

}
Run Code Online (Sandbox Code Playgroud)

考虑一下:

error C2065: 'j' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

编辑: 接受的答案来自位掩码,虽然我认为每个人都应该把它放在anio答案中.特别是,引用:"也许你应该将你的功能分解为2个功能"

bit*_*ask 7

.无论如何!

将数据尽可能保持在本地并尽可能保持const有两个主要优点:

  • 副作用减少,代码变得更加实用
  • 对于复杂对象,只要不再需要数据,就可以在函数内尽早调用析构函数

此外,这对于文档来总结函数的特定部分所做的工作非常有用.

我听说这被称为显式或虚拟范围.


ani*_*nio 6

我个人认为在函数中添加额外的作用域并没有多大价值.如果您依靠它来分离函数的各个部分,也许您应该将函数分解为2个函数.较小的功能比较大的功能更好.你应该努力拥有易于理解的小功能.

函数中范围的合法使用是限制锁定的持续时间:

int doX() 
{

 // Do some work

  { 
  //Acquire lock


  } // Lock automatically released because of RAII
}
Run Code Online (Sandbox Code Playgroud)

内部范围有效地限制了锁定的代码.我相信这是常见的做法.