有人可以向我解释一件事吗?从一方面来看,它的move constructor设计目的是通过消除不必要的复制对象来优化内存和处理器的使用,但从另一面来看,几乎所有地方move constructor都会使用编译器使用复制省略move ctor,禁用?的使用。这不是不合理吗?
有这个简单的类:
#include <iostream>
class B
{
public:
//default constructor
B(const char* str = "\0") {
std::cout << "Constructor called\n";
}
//copy constructor
B(const B& b) {
std::cout << "Copy constructor called\n";
}
//move constructor
B(B&& b) {
std::cout << "Move constructor called\n";
}
};
Run Code Online (Sandbox Code Playgroud)
这些语句之间在移动语义方面有什么区别:
B o1 = B("abc");
B o2 = B(B("abc"));
Run Code Online (Sandbox Code Playgroud)
这两行等价吗?