2013-08-06 23 views
10

Aşağıdakilere rastladım. Nullptr'de bir hamle yapmanın bir avantajı var mı? Temelde Düğüm * için bir sıfır atadığını varsayalım, bu yüzden burada bir hamle yapmak için herhangi bir avantaj olup olmadığından emin değilim. Düşüncesi olan var mı?Bir std :: use nullptr atamada kullanmalı mı?

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; 
}; 

cevap

19

nullptr çok std::move(nullptr)nullptr olup, tanımı bir rvalue (C++ 11 §2.14.7p1) gereğidir. Diğer herhangi bir değer değişmezini std::move, örneğin std::move(3) veya std::move(true)'a geçirmek için olduğu gibi hiçbir etkisi yoktur.

1

Herhangi bir POD türü için std :: move işlevini kullanmanın bir avantajı yoktur ve bir işaretçi bir POD türüdür. std::move, kopyalamak yerine bazı verileri taşımanıza olanak tanır. Örneğin, std::move bir std:string diğerine ise, kopyalanan dizinin tamamı yerine temeldeki depolama birimine işaretçi kopyalanır. Ancak, işaretçi değerinin hala kopyalandığına dikkat edin. Böylece, birlikte çalıştığınız tüm işaretçi std::move'un bir avantajı yoksa, bu işaretçi null olup olmadığının fark etmez.