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

42970bcb4da76e12be830f7a66c334c0.png

小怪兽爱吃肉

函数寿命static变量第一次开始[0]程序流遇到声明,并在程序终止时结束。这意味着运行时必须执行一些簿记保存,以便只在实际构造的情况下销毁它。此外,由于标准规定静态对象的析构函数必须以其构造完成后的相反顺序运行。[1]而施工顺序可能取决于具体的程序运行,必须考虑施工顺序。例struct emitter {

    string str;

    emitter(const string& s) : str(s) { cout <

    ~emitter() { cout <

    if (!skip_first)

        static emitter a("in if");

    static emitter b("in foo");}int main(int argc, char*[]){

    foo(argc != 2);

    if (argc == 3)

        foo(false);}产出:C:>sample.exe在foo中创建毁于福C:>sample.exe 1在if中创建在foo中创建毁于福毁于C:>sample.exe 1 2在foo中创建在if中创建毁于毁于福[0]自C+98[2]没有引用多个线程在多线程环境中的行为,这是未指定的,并且可能会出现问题,因为罗迪提到。[1] C+98剖面3.6.3.1 [basic.start.Term][2]在C+11中,静态是以线程安全的方式初始化的,这也称为魔术静力学.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值