gpt4 book ai didi

c++ - 初始化一个没有复制构造的类

转载 作者:行者123 更新时间:2023-11-30 03:14:05 25 4
gpt4 key购买 nike

我正在阅读 c++ priemr 中关于复制构造的一章,书中说“在复制初始化期间,允许(但不是必须)编译器跳过复制/移动构造函数并直接创建对象。即允许编译器重写

string null_book="xxxxxxx";

进入

string null_book("xxxxxxx");

即使编译器省略了对复制/移动构造函数的调用,复制/移动构造函数也必须存在并且必须可访问"

然后我写了一个类,删除了拷贝构造函数

class myclass {
public:
myclass(int a):id(a){
std::cout << "construct: "<<id<<std::endl;
}
myclass(const myclass& s) = delete;
myclass& operator=(const myclass& s) = delete;
private:
int id=0 ;
};

如果我这样做它编译成功

 myclass c = 2;

但这给了我错误

myclass c =myclass(2);

我很困惑,请帮助我,非常感谢

最佳答案

myclass c = expr;

是复制初始化。在 C++17 之前,要使 this 成为良构的,类型必须是可复制的或至少是可移动的。

自 C++17 起,用于初始化临时变量的表达式(在第一种情况下,存在从生成临时变量的 int 的隐式转换)改为用于初始化 c,因此有不涉及复制/移动,程序符合最新标准。

关于c++ - 初始化一个没有复制构造的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194372/

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