这本书Robert Lafore 的 C++ 面向对象编程 says,
静态局部变量具有自动局部变量的可见性
变量(即在包含它的函数内部)。然而,其
生命周期与全局变量的生命周期相同,只是它
直到第一次调用该函数时才存在
包含它。此后它在人的一生中一直存在
程序
第一次调用函数后存在意味着什么?静态本地存储是在程序加载到内存时分配的。
存储空间是之前分配的main
输入,但是(例如)如果静态对象具有带副作用的构造函数,则这些副作用可能会延迟到第一次调用该函数之前。
但请注意,这不是一定案子。仅需要在进入该块之前进行常量初始化(不一定只是在执行“跨越”该定义时进行)。同样,在某些情况下,允许实现比所需的更早地初始化其他块范围静态变量(如果您想了解具体情况,可以查看 [basic.start.init] 和 [stmt.dcl] ,但它基本上可以归结为:只要它不影响它初始化的值。例如,如果您有类似的内容:
int i;
std::cin >> i;
{
static int x = i;
...该实现将无法初始化x
直到进入该块,因为直到他们才知道初始化该块的值。另一方面,如果您有:
{
static int i = 0;
...该实现可以尽早执行初始化(并且大多数将/将基本上在编译时执行此类初始化,因此它不会涉及执行any运行时的指令)。然而,即使对于不那么简单的情况,在逻辑上可能的情况下也允许提前初始化(例如,该值不是来自先前的执行)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)