gpt4 book ai didi

c++ - `const` ness、引用和函数调用

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:33 25 4
gpt4 key购买 nike

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 的限制。

最佳答案

我为您提供两种选择:

  1. 要么您确实希望 BarChild 构造函数采用 const Foo&,在这种情况下,您需要坚持您的 promise ,即永远不允许 Foo 待修改的对象。为此,p_xp_foo 都需要是 const Foo*(即指向 const Foo 的指针).如果它是一个指向非 const Foo 的指针,您将有效地允许修改该对象,从而违反您的 promise 。

    class BarParent
    {
    const Foo* p_foo;

    public:
    BarParent(const Foo* p_x)
    {
    p_foo = x;
    }
    };
  2. 或者,您确实希望保留 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com