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 的最后位置。