【问题标题】:Should one use a std::move on a nullptr assignment?应该在 nullptr 分配上使用 std::move 吗?
【发布时间】:2013-08-06 21:19:08
【问题描述】:

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

【问题讨论】:

    标签: c++11 move-semantics nullptr


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 2013-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 2019-05-01
        • 2014-03-25
        相关资源
        最近更新 更多