我正在与一个声称支持C++的平台上的开发人员交谈,但是他们同时说,在程序出口处清除的静态变量的数量被绑定到一个神奇的数字(我认为他们说32在他们的平台上),他们说这符合C++标准.
它是否正确?
该标准规定,如果有副作用,必须调用所有析构函数.
[basic.start.term]/1:
具有静态存储持续时间的初始化对象(即,其生命周期(3.8)已开始的对象)的析构函数(12.4)被调用为从main返回并且由于调用std :: exit(18.5)而返回的结果.[...]
[basic.stc.static]/2:
如果具有静态存储持续时间的变量具有初始化或具有副作用的析构函数,则即使它看起来未被使用也不应被消除,除非可以按照12.8中的规定消除类对象或其复制/移动.关键字static可用于声明具有静态存储持续时间的局部变量.
但是,有关标准合规性的规则确实允许在实施限制方面有一些余地:
[intro.compilance]/2.1:
如果某个程序不违反本国际标准中的规则,则符合条件的实施应在其资源限制内接受并正确执行该程序.
对允许的静态变量数量的硬性限制可能看起来很奇怪,但是常见的实现对各种事物都有严格的限制,例如模板实例化深度.