应该在nullptr赋值上使用std :: move吗?

时间:2013-08-06 01:40:00

标签: c++11 move-semantics nullptr

我遇到了以下情况。在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;
};

2 个答案:

答案 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}}并不重要。