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) です nullptrstd::move他の右辺値リテラルを、たとえばstd::move(3)orに渡す場合と同様に、効果はありませんstd::move(true)

于 2013-08-06T01:43:35.193 に答える
1

POD 型に std::move を使用しても利点はなく、ポインターは POD 型です。std::move一部のデータをコピーするのではなく移動できます。たとえば、std::movestd:stringの場所に移動すると、配列全体がコピーされるのではなく、基になるストレージへのポインターがコピーされます。ただし、ポインター値はまだコピーされていることに注意してください。したがって、作業しているのがポインターだけでstd::moveある場合、利点はありません-そのポインターがそうであるかどうかは関係ありませnullん。

于 2013-08-06T01:45:35.373 に答える