我最近几天一直在学习(N)RVO.在我阅读c拷贝文章中的cppreference时,对于C++ 14:
...编译器是允许的,但不要求省略复制和移动 - (自C++ 11)类对象的构造,即使复制/移动(自C++ 11)构造函数和析构函数具有可观察的一面效果- .这是一个优化:即使它发生并且没有调用copy-/move-构造函数,它仍然必须存在并且可访问(好像根本没有发生优化),否则程序就会形成错误.
因此,复制或移动构造函数必须存在且可访问.但是在下面的代码中:
#include <iostream>
class myClass
{
public:
myClass() { std::cout << "Constructor" << std::endl; }
~myClass() { std::cout << "Destructor" << std::endl; }
myClass(myClass const&) { std::cout << "COPY constructor" << std::endl;}
myClass(myClass &&) = delete;
};
myClass foo()
{
return myClass{};
}
int main()
{
myClass m = foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:test.cpp: In function 'myClass foo()':
test.cpp:15:17: error: use of deleted function 'myClass::myClass(myClass&&)' …