c – 编译时“strlen()”有效吗?

前端之家收集整理的这篇文章主要介绍了c – 编译时“strlen()”有效吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有时需要将字符串的长度与常量进行比较.
例如:
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

好的是,编译器不会在二进制输出中包含“[]”字符串.

它是编译器特定的优化还是常见的行为?

解决方法

内联函数调用功能是编译器特定的优化和常见行为.也就是说,许多编译器可以做到这一点,但是它们不是必需的.
原文链接:https://www.f2er.com/c/114423.html

猜你在找的C&C++相关文章