news 2026/8/24 13:51:58

C++变量的自动初始化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++变量的自动初始化

文章目录

  • 变量的自动初始化
    • 1 全局变量、静态变量
    • 2 栈上变量
    • 3 堆上变量
      • 内置基础类型
      • 类类型
    • 4 值初始化

变量的自动初始化

1 全局变量、静态变量

全局变量、静态变量会自动进行零初始化。

静态局部变量,是在第一次执行到定义处自动进行零初始化。

2 栈上变量

栈上的基础类型变量,不会进行初始化,拥有不可预测的值。

栈上的类对象的成员变量,如果是基础类型,不会进行初始化;如果是类类型,且有默认构造函数,则会自动调用默认构造函数。

3 堆上变量

内置基础类型

堆上的int、double等内置基础类型对象(使用 new 创建),不会进行初始化,拥有不可预测的值。(内存可能保留旧的垃圾值)

int * p = new int; // 分配堆内存,不做初始化,内存保留旧的垃圾值,拥有不可预测的值 int * p2 = new int(); // 零初始化,置0 int * p3 = new int{}; // 零初始化,置0

类类型

在堆上的类对象(使用 new 创建),如果有默认构造函数,则会自动调用默认构造函数;
而类中的内置基础类型,如果在调用的构造函数中没有手动初始化,则依然不会被自动初始化,拥有不可预测的值;
类中的类类型成员,如果有默认构造函数,则会自动调用默认构造函数。

MyClass * my_class = new MyClass; // 分配堆内存,如果有默认构造函数,则调用

4 值初始化

不管在栈上还是堆上,如果使用了空的初始化列表{}对类进行初始化,例如MyClass{},会将类的成员进行值初始化。

初始化列表{}触发值初始化,值初始化行为分两条分支(C++ 标准规则):

  1. 聚合类,即没有用户声明的默认构造函数的类。值初始化过程会将所有成员零初始化。
  2. 有用户自定义的默认构造函数(无论是否空实现)。值初始化会调用用户自定义的默认构造函数,不会自动帮你把内置成员清零,内置成员是什么值,完全看你的构造函数有没有手动赋值。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 13:50:08

数据不通,穿透就是空话——国资数据治理的三道坎

穿透式监管系列 第5篇前一篇讲架构,说"底座先行"。但真正动手建底座的时候,大多数央企撞上的第一堵墙,不是技术问题,是数据问题。IDC的调研数据很扎心:82%的集团企业存在子公司之间数据标准不统一、集团层面…

作者头像 李华
网站建设 2026/8/24 13:44:08

16-SOFA_仿真背后的力学(总结)

1.AnimationLoop回顾 SOFA 一个完整仿真需要哪些东西,首先需要 AnimationLoop。它负责:决定一个时间步里面,各个计算步骤按照什么顺序执行,也就是:当前时间 t↓AnimationLoop组织各项计算↓完成一个仿真时间步↓进入 t…

作者头像 李华
网站建设 2026/8/24 13:41:45

重复造轮子很蠢,但我还是自己写了一套博客系统

重复造轮子很蠢,我非常清楚,不需要任何人提醒。但犹豫之后,我还是自己写了一套博客系统。 先回应一个很多人会有的疑惑:现在都什么年代了,怎么还有人自己做博客?这个问题我在上一篇里写过——为什么我选择…

作者头像 李华
网站建设 2026/8/24 13:38:09

DeepSeek Harness 从零入门完全指南:从环境搭建到推理评测微调实战

1. 写在前面:为什么你需要这本指南 DeepSeek 系列大模型以其卓越的推理能力、开源友好的授权以及极高的性价比,已经成为全球开发者和研究者的重要选择。但当你想真正把 DeepSeek 用起来时,很快就会遇到一个绕不开的概念——Harness(工程化工具链)。 很多初学者会有这样的…

作者头像 李华