C ++从const对象返回非const引用

时间:2014-09-16 19:20:32

标签: c++ c++11 reference const-correctness

我的结构中包含引用

template <class T>
struct RefContainer {

    RefContainer(T& t) : _r(t) {}

    T& getRef() {
        return _r;
    }

private:
    T& _r;
};

现在,另一个不可变的对象在其自身内部使用此结构,并且在其中包含此对象:

RefContainer<char> _c;

当我使用那个不可变对象用点转换自己时,我得到一个const引用。因为我在不可变对象编译器中调用了RefContainer对象的getRef,所以我违反了const的正确性。

RefContainer本身必须保存非常量左值引用,但我喜欢在不可变对象上链接调用以创建新的如下:

ImmubableObject obj;
auto newObj = obj.copyWithSomeAttributes().modifyWithThisString("str");
// I'm on C++11 btw, so I can use everything C++11 has to offer

我如何解决这个问题&#34;对&#34;方式(可能避免丑陋的const演员)?

1 个答案:

答案 0 :(得分:0)

你应该尝试这样的事情:

template <class T>
struct RefContainer {

    RefContainer(T& t) : _r(t) {}

    T& getRef() const {
             // ^^^^^
        return _r;
    }

private:
    T& _r;
};

这样,T&引用可以用作非const,无论RefContainer实例是否为const对象。