O tempo de compilação “strlen ()” é efetivo?
Às vezes é necessário comparar o comprimento de uma corda com uma constante.
Por exemplo:
if ( line.length() > 2 )
{
// Do something...
}
Mas estou tentando evitar o uso de constantes "mágicas" no código.
Normalmente eu uso esse código:
if ( line.length() > strlen("[]") )
{
// Do something...
}
É mais legível, mas não é eficiente devido à chamada de função.
Eu escrevi funções de modelo da seguinte forma:
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...
}
Em um build de lançamento (VisualStudio 2008), ele produz um código muito bom:
cmp dword ptr [esp+27Ch],2
jbe 011D7FA5
E o bom é que o compilador não inclui a string "[]" na saída binária.
É uma otimização específica do compilador ou é um comportamento comum?