猿问

C+函数中静态变量的生存期是多少?

C+函数中静态变量的生存期是多少?

如果变量声明为static在函数的作用域中,它只初始化一次,并在函数调用之间保留其值。它的生命到底是什么?何时调用其构造函数和析构函数?

void foo() { 
    static string plonk = "When will I die?";}


慕勒3428872
浏览 959回答 3
3回答

幕布斯7119047

如果没有标准中的实际规则,现有的解释是不完整的,见6.7:具有静态存储持续时间或线程存储持续时间的所有块范围变量的零初始化在任何其他初始化之前执行。具有静态存储持续时间的块作用域实体的持续初始化(如果适用的话)是在第一次输入块之前执行的。在允许实现在名称空间范围内静态或线程存储持续时间内静态初始化具有静态或线程存储时间的变量的相同条件下,允许实现对具有静态或线程存储持续时间的其他块作用域变量执行早期初始化。否则,此类变量将在控件第一次通过其声明时初始化;该变量在初始化完成后被视为初始化。如果通过抛出异常退出初始化,则初始化不完成,因此下次控件输入声明时将再次尝试初始化。如果在初始化变量时控件同时输入声明,则并发执行应等待初始化完成。如果控件在初始化变量时递归地重新输入声明,则该行为是未定义的。
随时随地看视频慕课网APP
我要回答