是C++中限制的静态变量的数量

Is the number of static variables limited in C++

本文关键字:静态 变量 C++      更新时间:2023-10-16

我曾与一个声称支持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能力和/或严格内存限制的嵌入式平台上。