【问题标题】:Assignment operator with a constant class member具有常量类成员的赋值运算符
【发布时间】:2021-06-28 08:03:12
【问题描述】:

我有一个名为 RSArray 的类,其中包含一个常量数据成员。但是对于这个类,我想创建一个自定义赋值运算符。请参阅下面的代码:-

class RSArray
{
private:
    int *data;
    const int max_size;
public:
    RSArray(size) : max_size(size)
    {
        data = new int[max_size];
    }
    RSArray &operator=(const RSArray &src)
    {
         data = new int[src.max_size];
         max_size = src.max_size
    }

}

int main()
{
    RSArray one(10), two(15);
    one = two;
}

上面的代码在调用赋值运算符时出现错误,因为我们无法更改 const 数据成员的值。

有没有其他方法可以消除这个错误?

【问题讨论】:

  • 你在哪里初始化max_size?这是对所有实例都相同还是在创建新实例时单独设置?对我来说,您似乎更愿意使用 std::vector<int> data; 类成员变量。
  • 如果你想支持赋值,请不要将 max_size 设为 const。
  • 你所要求的没有任何意义。如果实例中存在无法更改的数据,那么您也不能期望使一个实例看起来像另一个实例 - 因为如果另一个实例看起来不同,那么这样做就会对其进行更改。
  • @πάνταῥεῖ 看起来他们正在实施homework::vector<int>
  • @Caleth 无论 OP 的情况如何,我都在这里给出建议,这与 SO Q&A 完全无关。

标签: c++ class constants


【解决方案1】:

有没有其他方法可以消除这个错误?

是的,从max_size 中删除const。根据定义赋值会改变目标。

【讨论】:

  • 好的,我只是想知道赋值运算符是否支持const
猜你喜欢
  • 2011-05-16
  • 2012-01-27
  • 2012-09-25
  • 2011-12-15
  • 1970-01-01
  • 2011-10-20
  • 2014-10-07
  • 2010-12-22
  • 2016-02-03
相关资源
最近更新 更多