c – 删除的复制构造函数导致删除的默认构造函数

c – 删除的复制构造函数导致删除的默认构造函数,第1张

概述这段代码不能用 gcc 4.7.0编译: class Base{public: Base(const Base&) = delete;}; class Derived : Base{public: Derived(int i) : m_i(i) {} int m_i;}; 错误是: c.cpp: In constructor ‘Derived::Der 这段代码不能用 gcc 4.7.0编译:
class Base{public:    Base(const Base&) = delete;}; class Derived : Base{public:    Derived(int i) : m_i(i) {}    int m_i;};

错误是:

c.cpp: In constructor ‘Derived::Derived(int)’:c.cpp:10:24: error: no matching function for call to ‘Base::Base()’c.cpp:10:24: note: candIDate is:c.cpp:4:2: note: Base::Base(const Base&) <deleted>c.cpp:4:2: note:   candIDate expects 1 argument,0 provIDed

换句话说,编译器不会为基类生成默认构造函数,而是尝试将已删除的复制构造函数作为唯一可用的重载调用.

这是正常的行为吗?

@H_404_12@解决方法 C11§12.1/ 5指出:

A default constructor for a class X is a constructor of class X that can be called without an argument. If there is no user-declared constructor for class X,a constructor having no parameters is implicitly declared as defaulted (8.4).

你的基地(const Base&)=删除;计为用户声明的构造函数,因此它禁止生成隐式默认构造函数.解决方法当然是声明它:

Base() = default;
@H_404_12@ @H_404_12@ 总结

以上是内存溢出为你收集整理的c – 删除的复制构造函数导致删除的默认构造函数全部内容,希望文章能够帮你解决c – 删除的复制构造函数导致删除的默认构造函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251446.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存