我在实现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 xfrom l-valuetor-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 } { }
};