删除拷贝构造函数后编译器为何不生成默认构造函数?
显式删除拷贝构造函数后默认构造函数无法使用的原因
在C++17中,只要你显式声明了任何构造函数(哪怕是被delete标记的),编译器就不会再为类自动生成默认构造函数。
你的代码里显式写了A(const A& a) = delete;,这属于显式声明构造函数的范畴,因此编译器不会自动合成无参的默认构造函数。这时候执行A a;就会因为找不到匹配的构造函数而报错:No matching constructor for initialization of 'A'。
原代码示例:
class A { public: A(const A& a) = delete; static void test() { A a; // 此处报错 } };
解决方法就是手动显式提供默认构造函数,不管是用= default让编译器生成标准实现,还是自己写空实现:
class A { public: A() = default; // 显式声明默认构造函数 A(const A& a) = delete; static void test() { A a; // 正常运行 } };
内容的提问来源于stack exchange,提问作者scengka
相关产品推荐
相关产品推荐

