我正在设计一个应该有一个名为 const 数据成员的类K
。我还希望这个类有一个复制赋值运算符,但编译器似乎隐式地从任何具有 const 数据成员的类中删除了复制赋值运算符。这段代码说明了基本问题:
class A
{
private:
const int K;
public:
A(int k) : K(k) {} // constructor
A() = delete; // delete default constructor, since we have to set K at initialization
A & operator=(A const & in) { K = in.K; } // copy assignment operator that generates the error below
}
这是它产生的错误:
constructor.cpp:13:35: error: cannot assign to non-static data member 'K' with const-
qualified type 'const int'
A & operator=(A const & in) { K = in.K; }
~ ^
constructor.cpp:6:13: note: non-static data member 'K' declared const here
const int K;
~~~~~~~~~~^
1 error generated.
我想我理解编译器为什么这样做;我要复制到的类的实例必须先存在,然后才能复制到,K
如果它是 const,我不能在该目标实例中分配,就像我在上面尝试做的那样。
我对这个问题的理解正确吗?如果是这样,有没有办法解决这个问题?也就是说,我可以为我的类定义一个复制构造函数并且仍然提供K
类似 const 的保护吗?