C++全局变量的初始化过程

2023-11-09

全局变量在main()前完成初始化(调用构造函数)

在调用构造函数前,全局变量已分配空间,内存全0

多个全局变量的初始化,按照代码编译的顺序

注意:全局变量被访问前可能它还没有调用构造函数初始化。

如果一个项目中,多个dll都用到一个全局变量在共同的lib中,则每个dll都有一个独立的全局变量(地址不同),每个全局变量会初始化。

如下代码,A里面访问了全局变量g_b, 改变全局变量g_a,g_b的顺序 会导致g_b.b的输出结果不同。

如按照A g_a; B g_b 的顺序定义,编译器会先调用A()时,这时g_b还没有调用B(), g_b.b=0,然后赋值 g_b.b=101; 

然后调用B(),g_b.b的值被改成1.

#include <istream>
using namespace std;

class B {
 public:
  int b = 1;
};

extern B g_b;
class A {
 public:
  int a = 0;
  A() {
    g_b.b = 101;
  }
};

#if 0
B g_b;
A g_a;
#else
A g_a;
B g_b;
#endif
int main() {
  printf("g_b=%d\n", g_b); //AB: g_b=1; BA: g_b=101
  return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++全局变量的初始化过程 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 数组组成的最小数字

    题目 最小数字 给定一个整型数组 请从该数组中选择3个元素组成最小数字并输出 如果数组长度小于3 则选择数组中所有元素来组成最小数字 输入描述 一行用半角逗号分割的字符串记录的整型数组 0 lt 数组长度 lt 100 0 lt 整数的取值
  • 【TypeScript】项目中对于TypeScript的打包处理

    webpack 通常情况下 实际开发中我们都需要使用构建工具对代码进行打包 TS同样也可以结合构建工具一起使用 下边以webpack为例介绍一下如何结合构建工具使用TS 步骤 初始化项目 进入项目根目录 执行命令 npm init y 主要
  • java 矩阵[多维数组]源代码

    1 import java util Random 2 3 矩阵类 4 public class Matrix 5 6 private int matrix 7 8 Random random new Random 9 10 构造方法 11
  • YiOVE书源:不只是书源,还有对书源的一些预处理,比如提前查看书源数量,以及包含哪些小说站

    引言 我是一个小说爱好者 阅读APP更是其中的效果斐然的不错宝器 平时自己也会收集一些书源 但是在这过程中产生了一些需求 比如 书源的数目是多少 书源链接还有效吗 于是 自己基于Flask写了一个程序 可以解决以上需求 并且可以在网页端显示
  • JqGrid完整例子

    之前写过一篇过于ajax异步加载jqgrid的文章 那个只是一个特殊的情况 如果创建不同数据库表的jqgrid 必须分别写servlet dao层和连接池 很麻烦 今天我写了一个万能的写法 客官只要在前台js中写入表格名称和字段名称即可实现
  • java 中秒杀逻辑

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 考虑要点 二 预减库存 三 秒杀超卖 四 排它锁是什么 前言 什么是秒杀 是一种高并发的技术 许多电商网站都是采用这样的技术应对突发流量的问题 一 考虑要
  • tensorflow提示缺少cudnn64_7.dll

    解决思路 下载一个 https developer nvidia com rdp cudnn download 下载后的压缩包有三个文件 把三个文件添加到对应的地方即可
  • Linux ping www.baidu.com时报错 Name or service not known原因

    一般是你配置的ens33的IPADDR跟虚拟机网络编辑器里的网段不一样 编辑 虚拟网络编辑器 NAT模式 NET设置 这里可以更改net设置里的参数 vi etc sysconfig network scripts ifcfg ens33
  • 红外寻迹原理以及STM32 GPIO的输入检测

    红外寻迹原理以及GPIO的输入检测 一 红外寻迹原理 采用YL 70 红外寻迹壁障模块 红外发射管 透明 发出红外光 如果红外光照在浅色平面 则红外光被反射 并且被红外接收管 黑色 接收 同时对应的输出接口输出低电平 0 红外主板上对应的L
  • 数据压缩实验五:JPEG文件解码实验分析

    一 实验原理 1 JPEG编码原理 JPEG 是Joint Photographic Experts Group 联合图像专家小组 的缩写 是第一个国际图像压缩标准 jpeg jpg是最常用的图像文件格式 是一种有损压缩格式 JPEG 编码
  • linux命令行常用的移动操作

    linux命令行常用的移动操作 1 光标快速切换到行尾行首 Ctrl a 行首 Ctrl e 行尾 2 删除至行尾 Ctrl k 3 删除命令行的命令 Del 删除属光标所在处的字符 Ctrl d 删除光标所在处的字符 BACKSPACE或
  • PAT乙级 1010 一元多项式求导 (25分)

    1010 一元多项式求导 25分 设计函数求一元多项式的导数 注 x n n为整数 的一阶导数为nxn 1 输入格式 以指数递降方式输入多项式非零项系数和指数 绝对值均为不超过 1000 的整数 数字间以空格分隔 输出格式 以与输入相同的格
  • 如何搭建一台属于自己的服务器

    对于新手小白来说 我推荐使用大厂们的服务器 比如阿里云 腾讯云等 这种不仅有强大的大厂背景支持 且不用担心维护 界面功能友好完善 非常适合新手小白 我使用的是腾讯云 所以接下来以腾讯云为例讲解 服务器类型的选择 个人用户的话推荐大家使用 轻
  • 图文详解MOS管的米勒效应

    如下是一个NMOS的开关电路 触发信号VG1设置DC电平2V 方波 振幅2V 频率50Hz T2的开启电压2V 所以MOS管T2会以周期T 20ms进行开启和截止状态的切换 首先仿真Vgs和Vds的波形 会看到Vgs 2V的时候有一个小平台
  • Java自动化测试语言高级之Iterator

    Java自动化测试语言高级之Iterator 文章目录 Java自动化测试语言高级之Iterator Java Iterator 迭代器 Java Iterator 迭代器 Java Iterator 迭代器 不是一个集合 它是一种用于访问
  • shell 字符串数组的使用

    ex 简单例子 str h ee h i h ed0llo for s in str do echo s done PS 最开始折腾好久 是因为我写了一个str6 5 这样的变量 导致 一直报错 还以为是 数组声明方式有问题 我想调用另一个
  • 正点原子IMX6ULL开发板通过网络修改系统时间

    设置时区 开发板系统为正点原子出厂系统 通过网络获取时间 需要设置开发板时区 首先使用date指令查看系统当前时区 此时系统的时区为UTC 世界协调时 这个时候直接通过网络获取时间 得到的时间是UTC时区下的时间 需要先将系统的时区设置为中
  • matlab如何实现不同的值显示不同的颜色

    举例一 一 视图 二 代码 作者 CoderMan 链接 https www zhihu com question 503639152 answer 2257427351 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载
  • 二进制算法_本地二进制模式算法:其背后的数学❗️

    二进制算法 介绍 Introduction The main idea behind LBP is to describe the neighborhood of image elements using binary codes This
  • C++全局变量的初始化过程

    全局变量在main 前完成初始化 调用构造函数 在调用构造函数前 全局变量已分配空间 内存全0 多个全局变量的初始化 按照代码编译的顺序 注意 全局变量被访问前可能它还没有调用构造函数初始化 如果一个项目中 多个dll都用到一个全局变量在共