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

为何能获取嵌套Pair对象的值却无法设置其值?

问题解析与解答

核心差异:值返回的临时对象特性

你的问题本质是值返回的临时对象的读写行为差异,拆解来看:

1. 获取操作可行的原因

当调用p2.getx()时,方法返回的是p2内部嵌套Pair对象的临时副本。这个副本是原对象的完整拷贝,所以它的成员值和原对象完全一致。此时调用副本的getx()/gety(),自然能拿到和原对象相同的结果——你读取的是临时副本的值,但因为副本和原对象初始状态一致,所以看起来和直接访问原对象效果一样。

2. 设置操作无效的原因

执行(p2.getx()).setx('c')时,同样先创建了临时副本,但你调用setx()修改的是这个临时副本的成员。临时副本的生命周期只在当前语句内,语句执行完毕后就会被销毁,p2内部的原嵌套对象根本没被触及,所以你的修改不会体现在原对象上,看起来就像“设置无效”。

解决方法

要直接修改原对象的内部成员,只需把getx()的返回类型改为引用,让方法返回原对象的别名而非副本:

template<typename T1, typename T2>
class Pair {
private:
    T1 x;
    T2 y;
public:
    // 返回可修改的引用
    T1& getx() { return x; }
    // 为const对象提供只读引用重载
    const T1& getx() const { return x; }
    
    T2& gety() { return y; }
    const T2& gety() const { return y; }
    
    void setx(const T1& val) { x = val; }
    void sety(const T2& val) { y = val; }
};

修改后,p2.getx()返回的是p2内部x成员的直接引用,后续调用setx()/sety()会直接修改原对象的成员,操作就能生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:52:42