我遇到了以下情况。在nullptr上进行移动有什么好处吗?我假设它基本上为Node *分配一个零,所以我不确定在这里做一个移动是否有任何好处。有什么想法吗?
template <typename T>
struct Node
{
Node(const T& t): data(t), next(std::move(nullptr)) { }
Node(T&& t): data(std::move(t)), next(std::move(nullptr)) { }
T data;
Node* next;
};
答案 0 :(得分:24)
nullptr
是一个右值(C ++11§2.14.7p1),因此std::move(nullptr)
是 nullptr
。它没有任何效果,就像将任何其他右值文字传递给std::move
的情况一样,例如std::move(3)
或std::move(true)
。
答案 1 :(得分:1)
对任何POD类型使用std :: move没有任何优势,指针是POD类型。 std::move
允许您移动一些数据而不是复制它。例如,如果std::move
一个std:string
到另一个std::move
,则复制指向底层存储的指针而不是复制的整个数组。但请注意,指针值仍在被复制。因此,如果您正在使用的只是指针,null
没有优势 - 指针是否为{{1}}并不重要。