Иногда необходимо сравнить длину строки с константой.
Например:
if ( line.length() > 2 )
{
// Do something...
}
Но я стараюсь избегать использования "магических" констант в коде.
Обычно я использую такой код:
if ( line.length() > strlen("[]") )
{
// Do something...
}
Это более читаемо, но не эффективно из-за вызова функции.
Я написал функции шаблона следующим образом:
template<size_t N>
size_t _lenof(const char (&)[N])
{
return N - 1;
}
template<size_t N>
size_t _lenof(const wchar_t (&)[N])
{
return N - 1;
}
// Using:
if ( line.length() > _lenof("[]") )
{
// Do something...
}
В сборке релизов (VisualStudio 2008) он создает довольно хороший код:
cmp dword ptr [esp+27Ch],2
jbe 011D7FA5
И хорошо, что компилятор не включает строку "[]" в двоичном выходе.
Является ли это конкретной оптимизацией для компилятора или это обычное поведение?