gpt4 book ai didi

c++ - 可以从私有(private)构造函数/赋值运算符更改为已删除破坏二进制兼容性吗?

转载 作者:行者123 更新时间:2023-12-04 08:29:08 24 4
gpt4 key购买 nike

使用 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 的声明不会以任何语言版本编译,所以至少你不会遇到这个问题。
这是 demo .

关于c++ - 可以从私有(private)构造函数/赋值运算符更改为已删除破坏二进制兼容性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65111353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com