是C++中限制的静态变量的数量
Is the number of static variables limited in C++
我曾与一个声称支持C++的平台上的开发人员交谈,但他们同时表示,在程序出口处清理的静态变量的数量与一个神奇的数字绑定(我想他们在平台上说是32),他们说这符合C++标准。
这是正确的吗?
标准规定,如果所有析构函数都有副作用,则必须调用。
[basic.start.term]/1:
使用静态存储的初始化对象(即寿命(3.8)已开始的对象)的析构函数(12.4)duration是从main返回的结果,也是调用std::exit(18.5)的结果。〔…〕
[basic.stc.static]/2:
如果具有静态存储持续时间的变量具有初始化或具有副作用的析构函数,则不应即使它看起来未使用,也会被删除,但类对象或其复制/移动可能会被删除如12.8中所述。关键字static可用于声明具有静态存储持续时间的局部变量。
然而,关于标准合规性的规则在实施限制方面确实允许一些余地:
[intro.compilance]/2.1:
如果程序不包含违反本国际标准规则的内容,则合格实施应在其资源限制内接受并正确执行该程序。
对允许的静态变量数量的严格限制可能看起来很奇怪,但常见的实现对各种事情都有严格限制,例如模板实例化深度。
如果在程序退出时清理的静态变量有限制,那么这肯定不是C++语言标准强制要求的。
然而,根据平台、编译器和运行时库的不同,可能会有一些限制,即在具有较小CPU能力和/或严格内存限制的嵌入式平台上。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量