17

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

2 回答 2

35

nullptr根据定义,它是一个右值(C++11 §2.14.7p1 std::move(nullptr) nullptr,. 它没有任何效果,就像将任何其他右值文字传递给std::move、 例如std::move(3)或一样std::move(true)

于 2013-08-06T01:43:35.193 回答
1

对任何 POD 类型使用 std::move 没有任何优势,并且指针是 POD 类型。std::move允许您移动一些数据而不是复制它。例如,如果您进入std::move另一个std:string,则复制指向底层存储的指针,而不是复制整个数组。但请注意,指针值仍在被复制。因此,如果您正在使用的只是指针,std::move则没有任何优势 - 该指针是否存在都没有关系null

于 2013-08-06T01:45:35.373 回答