gpt4 book ai didi

C++ 为什么在不使用删除的函数时编译器失败并显示错误代码 C2280

转载 作者:行者123 更新时间:2023-11-28 01:22:06 32 4
gpt4 key购买 nike

我试图理解为什么在从未使用已删除的函数时编译器失败并显示错误代码 C2280(尝试引用已删除的函数)。

这是一个失败的代码示例

class A {
public:
A() {
cout << "default" << endl;
}

A(A const&) {
cout << "copy" << endl;
}

A(A&&) = delete;

A create() {
return A();
}
};

void main() {
A a;
A b(a.create());
}

还有我看不懂的代码

class A {
public:
A() {
cout << "default" << endl;
}

A(A const&) {
cout << "copy" << endl;
}

A(A&&) {
cout << "move" << endl;
}

A create() {
return A();
}
};

void main() {
A a;
A b(a.create());
}

此代码编译但不在控制台上显示“移动”。

结果是

default
default

最佳答案

在 C++17 之前,复制省略是一个可选的优化,但编译器仍然必须检查复制/移动构造函数是否可用。从 C++17 开始,您的代码将无错误地编译。

关于C++ 为什么在不使用删除的函数时编译器失败并显示错误代码 C2280,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55660771/

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