尝试在类中设置对const引用成员的引用

时间:2016-03-11 17:10:16

标签: c++ c++11

  1. 我想我的objectA有一个对objectB的const引用。

  2. 我想通过方法传递该引用。

  3. 我有类似的东西

    objectA.h

    private:
    const objectB &__contextObjectB;
    void addObjectBContext(const  objectB &contextObjectB) const;
    

    objectA.cpp

    void addObjectBContext(const objectB &contextObjectB) const
    {
        const_cast<objectB&> (__contextObjectB) = &contextObjectB;
    }
    

    我收到此错误 表达式必须是可修改的L值。

    我认为与const_cast的整个交易是为了使左值表达式可以修改。

    有人可以帮助我吗?

2 个答案:

答案 0 :(得分:6)

您只能初始化一次参考。如果引用是类成员,那么它需要在构造函数中初始化,因为这是所有类成员初始化的地方。那就像

class Bar {};

class Foo
{
public:
    Foo(Bar & b_) : b(b_) {}
private:
    Bar& b;
};

一旦初始化了引用,就无法改变它的引用。如果你需要那种语义,那么你需要使用某种指针。

另请注意,使用const_castconst转换为const对象,然后修改它是未定义的行为。

答案 1 :(得分:0)

@NathanOliver解释了为什么我无法做到这一点,感谢

@ Jarod42给了我另外一个选择。

出于某种原因,下面的代码并不适用。左值是不可修改的

const objectB *__contextObjectB;

但似乎是一个不错的选择。

std::reference_wrapper<const objectB&>

谢谢大家。