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