现在的位置: 首页 > 综合 > 正文

赋值技巧

2013年10月02日 ⁄ 综合 ⁄ 共 816字 ⁄ 字号 评论关闭

在赋值的时候你还在什么都没有考虑就开始逐一赋值了吗?

看看iosfwd中是怎么做的吧

在iosfwd中我们找到了这个函数

Code:
  1. static _Elem *__CLRCALL_OR_CDECL _Move_s(_Elem *_First1, size_t _Dest_size,const _Elem *_First2, size_t _Count)   
  2.     {   // move [_First1, _First1 + _Count) to [_First2, ...)   
  3.         //      _DEBUG_POINTER(_First1);   
  4.         //      _DEBUG_POINTER(_First2);   
  5.         _SCL_SECURE_CRT_VALIDATE(_Dest_size >= _Count, NULL);   
  6.         _Elem *_Next = _First1;   
  7.         if (_First2 < _Next && _Next < _First2 + _Count)   
  8.             for (_Next += _Count, _First2 += _Count; 0 < _Count; --_Count)   
  9.                 assign(*--_Next, *--_First2);   
  10.         else  
  11.             for (; 0 < _Count; --_Count, ++_Next, ++_First2)   
  12.                 assign(*_Next, *_First2);   
  13.         return (_First1);   
  14.     }  

功能就是逐一移动了,但是分了两种情况,自己看看吧

果然当不分两种情况时,_First1和 _First2指向同一段内存时发生了错误

抱歉!评论已关闭.