为什么不允许在全局名称空间中使用块作用域?

Use*_*482 0 c++ c++11

我很好奇为什么{}不允许在任何函数(在全局范围内)之外创建块范围。

我可以执行以下操作:

int main(){

  {
    int i = 4;
  }

    //other stuff

}
Run Code Online (Sandbox Code Playgroud)

但不是

{
    int i = 4;
}


int main(){
    //other stuff
}
Run Code Online (Sandbox Code Playgroud)

这个问题激起了我在实现编译时声明时的兴趣,为此我创建了一个变量,在声明逻辑完成后(释放内存)将立即销毁该变量。

Pau*_*ers 5

我很好奇为什么不允许在任何函数(在全局范围内)之外创建块范围{}。

这将是毫无意义和误导的。在任何函数外部声明的变量都是静态分配的,因此永远不会超出范围(在程序末尾除外)。


编辑:要使变量在程序启动时暂时存在,可以执行以下操作:

static auto throwaway_name = [] () { MyClass myVar; return 0; } ();
Run Code Online (Sandbox Code Playgroud)

静态分配的唯一一件事是int(可能无法优化,我不确定)。