为什么 C++ 认为我的类是可复制构造的,而实际上它无法被复制构造?

对于“这个类是否可复制构造?”这个问题,答案应该是什么?你不知道定义是什么,只知道它的声明。编译器是否应该停止编译并显示错误信息“无法预测未来”?但是,如果你不想在头文件中暴露复制构造函数的实现呢?判断可复制构造的规则是是否存在未被删除的复制构造函数。

C++编译器判断类是否可复制构造是基于是否存在未被删除的复制构造函数。尽管Derived类有自定义的复制构造函数,但由于Base类不可复制,实际复制会失败。如果将复制构造函数设为默认,编译器会认为Derived类不可复制。

原文中文,约2000字,阅读约需5分钟。发表于:
阅读原文