看看模板的源代码:
size_type __CLR_OR_THIS_CALL find(const _Elem *_Ptr,
size_type _Off, size_type _Count) const
{ // look for [_Ptr, _Ptr + _Count) beginnng at or after _Off
_DEBUG_POINTER(_Ptr);
if (_Count == 0 && _Off <= _Mysize)
return (_Off); // null string always matches (if inside string)
size_type _Nm;
if (_Off < _Mysize && _Count <= (_Nm = _Mysize - _Off))
{ // room for match, look for it
const _Elem *_Uptr, *_Vptr;
for (_Nm -= _Count - 1, _Vptr = _Myptr() + _Off;
(_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0;
_Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1)
if (_Traits::compare(_Uptr, _Ptr, _Count) == 0)
return (_Uptr - _Myptr()); // found a match
}
return (npos); // no match
}
// look for [_Ptr, _Ptr + _Count) beginnng at or after _Off
这个注释说的已经很明白了
在看看这个函数:
size_type __CLR_OR_THIS_CALL find(const _Elem *_Ptr, size_type _Off = 0) const
{ // look for [_Ptr, <null>) beginnng at or after _Off
return (find(_Ptr, _Off, _Traits::length(_Ptr)));
}