我在实现list
类的代码中找到了以下代码段
void push_front( const T & x ) { insert( begin( ), x ); }
void push_front( T && x ) { insert( begin( ), std::move( x ) );}
现在我知道,如果我有一个将参数作为 的函数r-value
,则该参数将l-value
在函数的范围内(不是吗?)。
所以我可以用
void push_front( const T & x ) { insert( begin( ), x ); }
void push_front( T && x ) { push_front( x );}
第一个问题:我说的对吗?
第二个:考虑到r-value
第一个片段中的l-value
参数是第二个函数内部的参数,将std::move( x )
cast x
from l-value
tor-value
和函数push_front()
调用函数的r-value
版本insert()
还是什么?
编辑::
这是如何insert()
实现的
iterator insert( iterator itr, const T & x )
{
Node *p = itr.current;
theSize++;
return { p->prev = p->prev->next = new Node{ x, p->prev, p } };
}
iterator insert( iterator itr, T && x )
{
Node *p = itr.current;
theSize++;
return { p->prev = p->prev->next = new Node{ std::move( x ), p->prev, p } };
}
的定义Node
struct Node
{
private:
T data;
Node *prev;
Node *next;
Node( const T & d = T{ }, Node * p = nullptr,
Node * n = nullptr )//It's possible because of const
:data{ d }, prev{ p }, next{ n } { }
Node( T && d, Node * p = nullptr, Node * n = nullptr )
: data{ std::move( d ) }, prev{ p }, next{ n } { }
};