代码之家  ›  专栏  ›  技术社区  ›  Paolo Celati

使用移动构造函数时,构造函数中没有默认参数

  •  2
  • Paolo Celati  · 技术社区  · 6 年前

    当我在子类中添加了一个move构造函数时,我发现我不能为构造函数使用默认参数。我还尝试在中使用重载构造函数 base_class 使用零参数调用普通构造函数,并手动传入参数,但我遇到了同样的问题。

    Visual Studio发出的错误消息为: error C2512: 'child_class<base_class>': no appropriate default constructor available

    class base_class {
    public:
        base_class(int param1=1) {}
    };
    
    template <typename BaseType>
    class child_class : public BaseType {
    public:
        using BaseType::BaseType;
        child_class(child_class&& move_in)
            : BaseType(std::move(move_in)) {}
    };
    
    int main(int argc, char** argv) {
        child_class<base_class> instance1; // MSVC says no default constructor so doesn't compile.
        child_class<base_class> instance2(123); // No problem
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Sebastian Redl    6 年前

    这可能是继承的构造函数实现中的MSVC错误。Clang毫无怨言地编译代码。