我想我的objectA有一个对objectB的const引用。
我想通过方法传递该引用。
我有类似的东西
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的整个交易是为了使左值表达式可以修改。
有人可以帮助我吗?
答案 0 :(得分:6)
您只能初始化一次参考。如果引用是类成员,那么它需要在构造函数中初始化,因为这是所有类成员初始化的地方。那就像
class Bar {};
class Foo
{
public:
Foo(Bar & b_) : b(b_) {}
private:
Bar& b;
};
一旦初始化了引用,就无法改变它的引用。如果你需要那种语义,那么你需要使用某种指针。
另请注意,使用const_cast
将const
转换为const
对象,然后修改它是未定义的行为。
答案 1 :(得分:0)
@NathanOliver解释了为什么我无法做到这一点,感谢
@ Jarod42给了我另外一个选择。
出于某种原因,下面的代码并不适用。左值是不可修改的
const objectB *__contextObjectB;
但似乎是一个不错的选择。
std::reference_wrapper<const objectB&>
谢谢大家。