You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++未初始化整数成员输出随机值?为何不符合零初始化预期

为什么你的C++类成员没有被零初始化?

你代码里的问题出在初始化方式上,咱们拆解来看:

  1. 你写的A c;属于默认初始化。对于A这种没有自定义构造函数的类,默认初始化会对每个成员执行默认初始化——而C++里的基本类型(int、uint16_t这类)默认初始化的行为是不做任何初始化,所以成员a和b会保留内存里的原有垃圾值,输出自然是随机数。

  2. 你提到的“整数基本类型会被零初始化”是有前提条件的:

    • 全局/静态存储期的对象(比如在main函数外面定义的A c;)会被自动零初始化
    • 使用值初始化语法时,比如A c{};或者A c = A();,类的成员会被值初始化,基本类型就会被置零
    • 用new A();这种方式动态分配对象时,也会触发零初始化
  3. 关于你说的“类成员会调用构造函数”:基本类型确实存在默认构造函数,但这个构造函数的行为就是什么都不做——只有当对象被要求值初始化或零初始化时,基本类型才会被设置为0。

给你改个示例,这样就能得到零输出:

#include <cstdint>
#include <iostream>

class A {
public:
  int a;
  uint16_t b;
};

int main () {
  using namespace std;
  A c{}; // 值初始化
  cout << c.a << endl; // 输出0
  cout << c.b << endl; // 输出0
}

内容的提问来源于stack exchange,提问作者user129393192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:20:02