c++ - 为什么不允许全局命名空间的块作用域?
问题描述
{}
我很好奇为什么不允许在任何函数之外(在全局范围内)创建块范围。
我能够做到以下几点:
int main(){
{
int i = 4;
}
//other stuff
}
但不是
{
int i = 4;
}
int main(){
//other stuff
}
在实现编译时断言时,这个问题引起了我的兴趣,我为此创建了一个变量,该变量将在断言逻辑完成后立即销毁(以释放内存)。
解决方案
我很好奇为什么不允许在任何函数之外(在全局范围内)创建块范围 {}。
这将毫无意义且具有误导性。在任何函数之外声明的变量都是静态分配的,因此永远不会超出范围(程序末尾除外)。
编辑:要使变量在程序启动时暂时存在,您可以执行以下操作:
static auto throwaway_name = [] () { MyClass myVar; return 0; } ();
唯一静态分配的是一个int
(可能会被优化,我不确定)。
推荐阅读
- flask - WTForm 验证器未对非数字值提供反馈
- python - Python-烧瓶摘要身份验证与POSTMAN
- google-people-api - 使用 People API 为 google 联系人添加标签
- python - 如何仅从熊猫数据框中提取列标签?
- c# - 使用 WPF C# 中的复选框删除和编辑数据网格行(来自数据库的数据)
- javascript - 未捕获的类型错误:无法读取未定义的属性“路径”-React
- c - 如何将gets() 代码更改为fgets()?
- c++ - 运算符 [] 是否接受 C++ 中的整数以外的类型?
- rest - Suave with f# - 如何在 f# 聊天应用程序中有一个 rest api 和 websocket 端口?
- python-3.x - 如何下载和迭代csv文件