代码之家  ›  专栏  ›  技术社区  ›  lvella

如何用常量值初始化常量对象的非常量属性?

  •  0
  • lvella  · 技术社区  · 9 年前

    我需要实例化类的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" ?
        }
    };
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   Sam Varshavchik    9 年前

    对象本身是否是常量以及它的任何类成员是否是常量是两个完全独立的主题。

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

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

    my_type *v;
    

    my_type 本身不是常量类型)。

    因此,无法将此指针初始化为指向常量对象。

    包含此成员的类的某个实例是否为常量不是一个因素。