これらは同じ関数の定義ですが、最初にはmove(&&)
を使用してパラメータが渡され、2番目のパラメータは(const &
)を使用して渡されます。const&の代わりにmove(&&)が呼び出されるのはなぜですか?
template<typename T, class Allocator>
void MyList<T, Allocator>::push_front(T && t)
{
Link<T>* newnode = new Link<T>(t);
if (empty()) {
head = std::move(newnode);
tail = std::move(newnode);
std::cout << "Linked List Created using move with value: " <<t<< std::endl;
}
else {
head->prev = std::move(newnode);
newnode->next = std::move(head);
head = std::move(newnode);
std::cout << "Node Inserted using move at the beginning of List with value: " <<t<< std::endl;
}
}
template<typename T, class Allocator>
void MyList<T, Allocator>::push_front(const T & t)
{ Link<T>* newnode = new Link<T>(t);
if (empty()) {
head = newnode;
tail = newnode;
std::cout << "Linked List Created with value: " <<t<< std::endl;
}
else {
head->prev = newnode;
newnode->next = head;
head = newnode;
std::cout << "Node Inserted at the beginning of List with value: " <<t<< std::endl;
}
}
私がメインで以下のコードを実行すると:
MyList<int> l1;
l1.push_front(5);
l1.push_front(std::move(8));
私はいつもmove
機能のcout
を取得します。 const &
はデフォルトのものでなければなりませんか?
'std :: move(新しいリンク(t))'これはどうしようか?他の動き? –
Slava
@Slavaそうですね、私はどこにいても動かすことを追加していましたが、修正するつもりでしたが忘れました。ヘッドアップをありがとう!! – Bob
プログラミングは推測では機能しないので、どこにでも盲目的に移動する代わりに何をしているのかを理解する必要があります – Slava