C++返回常量对象之外的非常量引用

C++ returning non const reference out of const object

本文关键字:常量 非常 引用 返回 对象 C++      更新时间:2023-10-16

我有一个包含引用的结构

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

如何以"正确"的方式计算(可能避免丑陋的const类型转换)?

你应该试试这样的东西:

template <class T>
struct RefContainer {
    RefContainer(T& t) : _r(t) {}
    T& getRef() const {
             // ^^^^^
        return _r;
    }
private:
    T& _r;
};

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