首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VS.net的<memory>中_Uninit_copy函数奇怪的memmove调用(附代码),请求解惑,该如何解决

2012-03-09 
VS.net的memory中_Uninit_copy函数奇怪的memmove调用(附代码),请求解惑template class_Ty1,class_Ty2i

VS.net的<memory>中_Uninit_copy函数奇怪的memmove调用(附代码),请求解惑
template <class   _Ty1,
class   _Ty2>   inline
_Ty2   *_Uninit_copy(_Ty1   *_First,   _Ty1   *_Last,   _Ty2   *_Dest,
allocator <_Ty2> &,   _Scalar_ptr_iterator_tag)
{//   copy   [_First,   _Last)   to   raw   _Dest,   (const)   scalar   type
size_t   _Count   =   (size_t)(_Last   -   _First);

//   就是下面的语句,为什么要加_Count?
return   ((_Ty2   *)memmove(&*_Dest,   &*_First,
_Count   *   sizeof   (*_First))   +   _Count);//   NB:   non-overlapping   move
}


[解决办法]
代码好读多了吧。
现在你能看懂为啥要加_Count了吧。
[解决办法]
// 就是下面的语句,为什么要加_Count?

返回值的意义:
memmove 返回的是 *_Dest,
+ _Count 就是返回 *_Dest 有效数据区域的末尾部分。

也就是 _Uninit_copy 返回拷贝结束后 _Dest 的最后位置。

热点排行