В зависимости от длины строк (и вашего компилятора), вам лучше придерживаться operator==
. В Visual C ++ v10 это сводится к вызову memcmp
через char_traits::compare
, который (при оптимизации) будет сравнивать целевые диапазоны байтов в блоках, вероятно, столько же байтов за раз, сколько поместится в регистр 8 для 32/64-бит).
static int __CLRCALL_OR_CDECL compare(const _Elem *_First1, const _Elem *_First2,
size_t _Count)
{ // compare [_First1, _First1 + _Count) with [_First2, ...)
return (_CSTD memcmp(_First1, _First2, _Count));
}
Между тем, std::equal
(самая хорошая альтернатива) выполняет побайтовое сравнение. Кто-нибудь знает, будет ли он оптимизирован таким же образом, поскольку они являются обратными итераторами? В лучшем случае обработка выравнивания является более сложной, поскольку начало диапазона не гарантируется выровненным.
template<class _InIt1,
class _InIt2> inline
bool _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
{ // compare [_First1, _Last1) to [First2, ...)
for (; _First1 != _Last1; ++_First1, ++_First2)
if (!(*_First1 == *_First2))
return (false);
return (true);
}
См. Ответ @ greyfade здесь , чтобы узнать о некотором цвете в GCC.