首页 > 解决方案 > 为什么不允许全局命名空间的块作用域?

问题描述

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

我能够做到以下几点:

int main(){

  {
    int i = 4;
  }

    //other stuff

}

但不是

{
    int i = 4;
}


int main(){
    //other stuff
}

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

标签: c++c++11

解决方案


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

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


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

static auto throwaway_name = [] () { MyClass myVar; return 0; } ();

唯一静态分配的是一个int(可能会被优化,我不确定)。


推荐阅读