C++类构造函数未正确初始化成员变量的原因是什么?
C++代码问题解答
问题根因
你的代码核心问题是构造函数内定义的局部变量屏蔽了类的同名成员变量:
你在Person构造函数中写的int age = 20;,是在构造函数的作用域内重新声明了一个名为age的局部变量,赋值操作仅作用于这个局部变量,完全没有修改到类的public成员变量age。
类的int类型成员变量没有显式初始化时,属于未初始化状态,值是不确定的,你运行时得到0只是未定义行为的随机表现,更换编译或运行环境可能得到其他随机数值。
修复方案
常见的正确写法有三种:
- 直接给类成员变量赋值,删掉局部变量的类型声明
Person(){ age = 20; }
- 使用初始化列表初始化成员(C++类成员初始化的更规范写法,性能更优)
Person() : age(20) { // 其他构造逻辑 }
- 如存在同名参数需区分,用
this指针明确指向类成员(适合带参构造场景)
// 带参构造示例 Person(int age) { this->age = age; } // 调用方式:Person p(20);
内容的提问来源于stack exchange,提问作者Marc0_H
相关产品推荐
相关产品推荐

