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

C++使用std::list存储对象时get函数无法返回正确设置值问题

问题原因

代码无法返回已设置的股票名称,核心是范围for循环默认使用值传递遍历元素:

  • for(Stock obj : Stocks)写法下,循环内的obj是list中存储的Stock对象的临时拷贝副本,并非容器内的原始元素
  • 调用setStockName()修改的是临时副本的成员值,循环结束后临时副本直接销毁,list中存储的原始Stock对象的stockName字段始终为空
  • 最后输出名称的循环同样是拷贝list内未被修改的空对象,自然无法显示设置的名称
修复方法

遍历需要修改容器元素的场景,在范围for循环中使用引用绑定容器内的原始元素,避免生成临时拷贝;只读遍历场景可加const限定,兼顾性能和const正确性。

修正后的主函数循环代码

设置股票名称的循环修改为引用遍历:

//Set the name of each stock
for(Stock& obj : Stocks)
{
    std::string stockName;
    std::cin >> stockName;
    obj.setStockName(stockName);
}

输出股票名称的循环使用const引用遍历:

//Get the name of each Stock
for (const Stock& obj : Stocks)
{
    std::cout << obj.getStockName() << " , ";
}

可选的规范优化

getStockName()方法不会修改类成员,建议补充const限定,符合C++ const正确性规范:

  1. 头文件中修改方法声明:
std::string getStockName() const;
  1. cpp实现文件中同步修改方法定义:
std::string Stock::getStockName() const
{
    return this->stockName;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:57:29