【问题标题】:How to get an object using [] operator in C++ [duplicate]如何在C ++中使用[]运算符获取对象[重复]
【发布时间】:2020-02-21 04:24:20
【问题描述】:

我想使用 [] 运算符获取和设置测试类对象的值。但是得到以下错误:

lvalue required as left operand of assignment

提前致谢。

class Candidate {
    public:
    Candidate(string name):
        name(name) {}
    string name;
};

template<typename _key, typename _value>
class Test {
    _key key;
    _value value;
    public:
    _value operator[](_key key) {
        return this->value;
    }
};

int main() {
    Test<string, Candidate*> test;
    test["something"] = new Candidate("name");
    Candidate* candidate = test["something"];

    return 0;
}

【问题讨论】:

标签: c++ c++14


【解决方案1】:

对于这种使用,需要按引用返回,而不是按值返回。

_value& operator[](_key key) {
    return this->value;
}

您还可以考虑在对象为 const 时添加重载。

_value const& operator[](_key key) const {
    return this->value;
}

按值返回会返回一个过期值,不能按照 C++ 中的赋值规则对其进行赋值,除非该值明确允许这种赋值(这通常表示设计缺陷)。您必须返回一个左值或持久引用才能实际分配给它。

【讨论】:

  • 仅供参考。 stackoverflow.com/questions/37043078/… 完全一样。
  • @RSahu 好的,我已经标记了它。上一个被标记为重复的问题是完全不合适的,因为范围远大于用户犯的简单语法错误。
猜你喜欢
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2012-02-10
  • 2011-10-30
相关资源
最近更新 更多