class Foo{};
class BarParent
{
Foo* p_foo;
public:
BarParent(Foo * const p_x) //OR BarParent(Foo const * x) OR BarParent(Foo * x)
//OR (Foo const * const x)
{
p_foo = x;
}
};
class BarChild: public BarParent
{
public:
BarChild(const Foo& x)
: BarParent(& x){}
};
我的意图是:在使用 BarChild
构造函数时,使用 p_foo
指向 x
。有办法吗?
我已经为 BarParent
构造器尝试了所有可能的签名,但没有成功。
总结: 出于某种原因,我混淆了将一个(指向非 const
对象的指针)分配给(指向一个const
object) 打破了 const
的限制。
最佳答案
我为您提供两种选择:
要么您确实希望
BarChild
构造函数采用const Foo&
,在这种情况下,您需要坚持您的 promise ,即永远不允许Foo
待修改的对象。为此,p_x
和p_foo
都需要是const Foo*
(即指向const Foo
的指针).如果它是一个指向非const
Foo
的指针,您将有效地允许修改该对象,从而违反您的 promise 。class BarParent { const Foo* p_foo; public: BarParent(const Foo* p_x) { p_foo = x; } };
或者,您确实希望保留
Foo*
而不是const Foo*
,因此BarChild
构造函数应该采用Foo&
而不是const Foo&
。这样,您就不会在保持对象const
方面撒谎。class BarChild: public BarParent { public: BarChild(Foo& x) : BarParent(& x){} };
关于c++ - `const` ness、引用和函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773917/