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

为何C++类set方法中加int声明population后输出始终为0?

问题分析:C++类成员变量赋值异常原因

先看你写的代码:

#include <iostream> 
#include <string>
using namespace std;                

class ran{
  private:
    int population;
  public:
    void set(int x){
      int population = x;
    }
    int get(){
      return population;
    }    
};
int main() {
  ran linux;
  linux.set(50900);
  cout << linux.get();
  return 0;
}

核心原因:局部变量遮蔽了类成员变量

当你在set方法里写int population = x;时,你是在方法内部创建了一个新的局部变量,这个变量和类的私有成员population重名,但完全是两个独立的变量。你给这个局部变量赋值后,它会在方法执行结束后销毁,根本没修改过类的成员变量。

而类的私有成员population因为没有被显式初始化,属于未初始化的局部对象成员(main里的linux是局部对象),其值是未定义的,你看到输出0是编译器的默认初始化行为(不同环境可能输出其他随机值)。

当你去掉int关键字后,population = x;就会直接操作类的成员变量,把传入的x赋值给它,这时get方法就能返回正确的50900了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:25:37