c++ - 可以从私有构造函数/赋值运算符更改为已删除破坏二进制兼容性吗?
问题描述
使用 C++11。
我有一个类,我想通过进行以下更改来清理一下:
从
class MyClass {
public:
// code
private:
MyClass(const MyClass&);
MyClass& operator=(const MyClass&);
// members
};
至
class MyClass {
public:
// code
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
private:
// members
};
知道两者都已声明但未定义,此更改会破坏二进制兼容性吗?它有什么改善吗?
解决方案
如果您从第一个版本切换到第二个版本,您可以访问、用户声明、删除的构造函数,这样的代码将在 C++11 中编译:
MyClass b{};
但是如果你升级到 C++20,它就不会了。那可能不是你想要的。如果您坚持使用无法访问构造函数的第一个版本,则声明b
不会在任何语言版本中编译,因此您至少不会遇到此问题。
这是一个演示。
推荐阅读
- integration - NetSuite SuiteScript 2.0 与外部挂钩的集成
- c# - 编组结构列表时出现意外结果
- java - 如何将文件附加到可以在此 jar 中编辑的 jar?
- reactjs - 模型属性改变时调用组件方法
- julia - 使用 Gadfly 的 Julia 中的子图
- html - 如何让我的表单站点在每台设备上工作(响应式)
- ruby-on-rails - 如何在 rails 5 中修复此错误“HasManyThroughCantAssociateThroughHasOneOrManyReflection”?
- python - 根据条件 [PYTHON] 从多维列表中删除子列表
- python - 在 Python 中将多个操作压缩为单行
- javascript - 基于多标准的电子邮件警报触发器