有时需要将字符串的长度与常量进行比较.
例如:
例如:
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
好的是,编译器不会在二进制输出中包含“[]”字符串.
它是编译器特定的优化还是常见的行为?