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

C++调用方法返回对象后setNum修改属性值不生效结果不一致问题

问题原因与修复方案

核心问题原因

你遇到的问题本质是C++的值传递语义导致操作的始终是原对象的拷贝,未修改原对象,具体拆解如下:

  • 你的selectObj函数的入参A、B为值类型,调用时会对传入的test1、test2做一次拷贝,函数内部持有的已经是独立的副本,和原对象无关
  • selectObj的返回值也是值类型,返回时会再对内部的A/B拷贝生成临时对象,你调用setNum(25)修改的是这个临时对象的值,调用结束后临时对象立即销毁,全程没有触及原test1对象
  • 第二次调用selectObj时传入的仍是未修改的原test1,读取到的自然还是初始值10

修复方案

只需要把selectObj的入参和返回值都修改为左值引用,即可直接操作原对象:

// 入参改为引用,返回值也改为引用
example& selectObj(example& A, example& B) {
    int selection;
    std::cout << "Select object 1 or 2: ";
    while (true) {
        std::cin >> selection;
        if (selection == 1)
            return A;
        else if (selection == 2)
            return B;
        else
            std::cout << "Invalid option, try again: ";
    }
}

修改后两次选择1时,setNum会直接修改原test1的x值,第二次调用getNum就能读到25,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:05