首页 > 编程语言 >C++ 静态变量什么时候完成初始化

C++ 静态变量什么时候完成初始化

时间:2024-10-27 15:30:58浏览次数:5  
标签:初始化 变量 静态 C++ 线程 分配内存

  1. C 语言在编译器就完成静态变量的内存分配和初始化;始化发生在任何代码执行之前,属于编译期初始化。

  2. C++ 全局或静态对象当且仅当对象首次用到时才进行构造,并通过atexit()来管理对象的生命期;

  3. 静态变量初始化是线程安全的。

全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;局部静态变量(一般为函数内的静态变量)在第一次使用时分配内存并初始化。这里的变量包含内置数据类型和自定义类型的对象。

非局部静态变量一般在main执行之前的静态初始化过程中分配内存并初始化,可以认为是线程安全的;局部静态变量在编译时,编译器的实现一般是在初始化语句之前设置一个局部静态变量的标识来判断是否已经初始化,运行的时候每次进行判断,如果需要初始化则执行初始化操作,否则不执行。这个过程本身不是线程安全的。




参考:
  1. https://blog.csdn.net/weixin_46645965/article/details/137012145

  2. https://www.cnblogs.com/dylan-liang/p/14407237.html

标签:初始化,变量,静态,C++,线程,分配内存
From: https://www.cnblogs.com/huvjie/p/18508495

相关文章

  • C++ Vector介绍及应用
    一.引言在C++编程中, std::vector 是一个非常重要的容器,它提供了动态数组的功能。这意味着它可以根据需要自动调整大小,存储一系列相同类型的元素,并允许快速随机访问。本文将详细介绍std::vector的基本概念、特性、常用操作以及一些实际应用场景。二.什么是std::vector? std:......
  • C++中的函数重载
    前言    在给函数命名的时候,我们通常会遇到这类问题,这类函数都是解决一个类型的问题的,例如两个数相加,两个int类型的整数相加,我们起名add1,然后两个double类型的浮点数相加,我们起名为add2......在一些小型项目中还行,但是在一些大型的项目中,这显然是不可取的。那么能不能......
  • c++数据封装
    C++ 数据封装数据封装(DataEncapsulation)是面向对象编程(OOP)的一个基本概念,它通过将数据和操作数据的函数封装在一个类中来实现。这种封装确保了数据的私有性和完整性,防止了外部代码对其直接访问和修改。所有的C++程序都有以下两个基本要素:程序语句(代码):这是程序中执行动作......
  • C++的继承和多态
    继承继承的本质意义是复用(不用写就有)父类的某些东西可以直接使用eg.但是注意:被继承的成员是新的成员,不是共用同一个成员(实例化的成员变量不同)         但是调用的函数是同一个函数继承基类成员访问方式的变化(重点)private访问 "在派......
  • C++11新标准の右值引用
    一、什么是左值、右值?专业的说法:左值是指表达式结束后依然存在的持久化对象;右值是指表达式结束后就不再存在的临时对象。通俗的说法:有名字的对象都是左值,右值没有名字。区分左右值得便捷方法:看能不能对表达式取地址,如果能,则为左值,否则为右值Tips:C++11把右值分为纯右值和......
  • Chromium127调试指南 Windows篇 - 安装C++扩展与配置(五)
    前言在前面的文章中,我们已经安装了VisualStudioCode(VSCode)并配置了基本的扩展。现在,我们将进一步优化我们的开发环境,重点关注C++相关的依赖扩展。这些扩展对于在VSCode中高效开发和调试Chromium项目至关重要。此外,我们还将学习如何使用gn工具生成VisualStudio2022的项目......
  • Linux 中的动态链接库和静态链接库是干什么的
    在Linux操作系统中,动态链接库(DynamicLinkLibraries,DLLs)和静态链接库(StaticLibraries)是两种用于存储和管理代码的关键编程概念。动态链接库允许程序在运行时加载和链接共享代码,多个程序可以共享同一代码库,从而减少内存占用并提高效率。相反,静态链接库在程序编译时将代码直接......
  • CSP/信奥赛C++刷题训练:经典二分例题(2):洛谷P1678:烦恼的高考志愿
    CSP/信奥赛C++刷题训练:经典二分例题(2)烦恼的高考志愿题目背景计算机竞赛小组的神牛V神终于结束了高考,然而作为班长的他还不能闲下来,班主任老t给了他一个艰巨的任务:帮同学找出最合理的大学填报方案。可是v神太忙了,身后还有一群小姑娘等着和他约会,于是他想到了同为计......
  • C++中decltype关键字用法总结
    目录一、前言二、基本用法及示例 三.推导规则四.decltype与typeid的区别五.decltype与std::decay的关系六.总结一、前言        decltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有......
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.C++11(1)
    1.自动类型推导(auto)C++11引入了auto关键字,可以根据初始值的类型自动推导变量的类型,从而减少了手动声明类型的繁琐。例如:std::vector<int>vec={1,2,3,4};autoit=vec.begin();//自动推导类型为std::vector<int>::iteratorauto的引入使代码更加简洁......