【问题标题】:Compiler aid in base's assignment operator from derived编译器从派生中辅助 base 的赋值运算符
【发布时间】:2016-08-31 19:45:47
【问题描述】:

假设我有以下课程

class Base
{
    // default CTOR
    // default Copy Assignment
};

class Derived : public Base
{
public:
    Derived() 
        // Calls base constructor 
    {
        // implementation
    }

    Dervied& operator=(const Dervied& other)
    {
        A::operator = (other); // Why can't compiler offer this by default

        // implementation
    } 
};

我很想知道为什么编译器默认不能在派生赋值期间提供调用基的赋值运算符,为什么我们需要显式调用它。 我是否忽略了某些不需要此(调用 A::operator = (other) )的情况。

对于构造函数编译器有这个考虑(即在派生构造期间调用基的构造函数)。

【问题讨论】:

标签: c++ operators variable-assignment


【解决方案1】:

我很想知道为什么编译器默认不能在派生赋值期间提供调用基的赋值运算符

一旦您要提供自己的实现,编译器就不会猜测您真正想要实现的目标。

虽然调用A::operator = (other) 看起来是一个合理的默认操作,但您仍然可以实现一些不同的操作。编译器无法知道,也不会限制你,也不会以你的方式这样做。

为什么我们需要显式调用它。我是否忽略了某些不需要此(调用 A::operator = (other) )的情况。

只要有创意,我可以想象您实际上想要覆盖此行为的情况。

【讨论】:

  • 我的意思是,为派生任务开发人员提供实现以指定基础的实现。开发人员是否忘记调用 base 的实现会比少数创造性场景带来更大的风险。编译器可以检查是否正在调用某些基本实现,然后不注入默认调用(类似于基的构造函数调用行为)
猜你喜欢
  • 2020-02-16
  • 2013-03-03
  • 1970-01-01
  • 2010-09-27
  • 2021-07-31
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多