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

C++11 应该在nullptr赋值上使用std::move吗?,c++11,move-semantics,nullptr,C++11,Move Semantics,Nullptr,我遇到了以下情况。在nullptr上移动有什么好处吗?我假设它基本上是给节点分配一个零,所以我不确定在这里移动是否有任何优势。有什么想法吗 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

我遇到了以下情况。在nullptr上移动有什么好处吗?我假设它基本上是给节点分配一个零,所以我不确定在这里移动是否有任何优势。有什么想法吗

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;
};
模板
结构体类型
{
节点(const T&T):数据(T),下一个(std::move(nullptr)){
节点(T&&T):数据(std::move(T)),下一个(std::move(nullptr)){}
T数据;
节点*下一步;
};

nullptr
根据定义是一个右值(C++11§2.14.7p1),因此
std::move(nullptr)
nullptr
。它没有任何效果,就像将任何其他右值文本传递给
std::move
,例如
std::move(3)
std::move(true)
对于任何POD类型使用std::move没有任何好处,指针是POD类型
std::move
允许您移动某些数据,而不是复制它。例如,如果将
std::move
一个
std:string
移动到另一个
std:string,则会复制指向底层存储的指针,而不是复制整个数组。但请注意,指针值仍在复制中。因此,如果您只使用指针,
std::move
没有任何优势-不管该指针是否为
null