如何用const值初始化const对象的非const属性

How to initialize a non-const attribute of a const object with a const value?

本文关键字:const 对象 属性 初始化 何用      更新时间:2023-10-16

我需要实例化类的const对象,并从const指针初始化其成员指针。这可能吗?怎么做呢?

我有这样的东西:

class A:
    public Base
{
public:
    A():
        v(nullptr)
    {}
    virtual void f() override
    {}
private:
    my_type *v;
    friend void f(const my_type& orig)
    {
        // How to create a "const A" with "v == &orig" ?
    }
};

对象本身是否为常量和它的任何类成员是否为常量是两个完全不同的主题。

类的成员是否可以以特定的方式初始化,并不取决于类的特定实例是否为常量。

指向常量对象的指针不能用于初始化指向非常量对象的指针。你的类成员:

my_type *v;

是一个指向非常量对象的指针(假设my_type本身不是常量类型)。

因此,该指针不能初始化为指向常量对象。

类的某个包含该成员的实例是否为常量,不作为因子。