如何解决如果我们创建用户定义的复制构造函数,为什么编译器不提供默认构造函数?
代码是:
#include <iostream>
using namespace std;
class Point
{
int x,y;
public:
Point(const Point &p) { x = p.x; y = p.y; }
};
int main()
{
Point p1; // COMPILER ERROR
Point p2 = p1;
return 0;
}
以上代码抛出错误:COMPILER ERROR: no matching function for call to 'Point::Point()
当我们创建自己的复制构造函数时,编译器不会创建默认构造函数。为什么?
这只是一个 C++ 标准规则还是有什么原因??
编辑:我知道规则。我只是在找原因。
解决方法
规则是,如果任何构造函数不存在,则自动创建一个默认构造函数。来自cppreference:
隐式声明的默认构造函数
如果没有为类类型(struct
、class
或 union
)提供任何类型的用户声明的构造函数,编译器将始终将默认构造函数声明为 { {1}} 类成员。
由于只有一个用户声明的构造函数(复制构造函数),所以没有提供默认构造函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。