在Effective Modern C ++中,它说
仅为缺少明确的类生成移动操作 声明了移动操作,复制操作和析构函数。
但是我用Gcc和Clang测试了它,没有错误被抛出。这条规则已经过时了吗?
#include <iostream>
#include <string>
#include <vector>
#include <memory>
class A
{
int i;
public:
~A() = default;
};
int main()
{
A a, b;
a = b;
A c(a);
A d(std::move(a));
b = std::move(d);
}
编辑:复制&#34;移动操作&#34;从书中可能会导致混乱。将其更改为移动构造函数并移动赋值。
答案 0 :(得分:7)
int now = DateTime.NowUTC.TimeOfDay.Hours;
只是std::move
的演员。它创建的完全相同的xvalue将愉快地绑定到A&&
,这是隐式默认的复制c'tor和复制赋值运算符所接受的。这就是你所说的。
您向const A&
“显示”的事实并不意味着定义了任何这些移动操作。
如果您在班级中添加std:move
,则会开始以红色加下划线。因为现在copy c'tor接受一个非const值左右引用,它不会绑定到A(A&) = default;
。