内联这个函数还是不内联?

2024-01-10

我应该实现一个比较两个相似字符串的函数strcmp但忽略空白字符,所以

strcmpignorews("abc   ", " a b c")

应该给出相同的结果。

这是我的实现:

namespace {
    void SkipWhitespace(const char *&s) {
        for (; std::isspace(*s, std::locale::classic); ++s);
    }
}

int strcmpignorews(const char *s1, const char *s2) {
    for (; *s1 != '\0' && *s2 != '\0'; ++s1, ++s2) {
        SkipWhitespace(s1);
        SkipWhitespace(s2);

        if (*s1 != *s2) {
            break;
        }
    }

    return (*s1 < *s2) ? -1 : ((*s1 == *s2) ? 0 : 1);
}

现在的问题是,内联 SkipWhitespace 函数是否有意义?我想我在某处读过inline不应该用于包含循环或开关的函数,但我不记得在哪里以及为什么。


从历史上看,内联一直向编译器表明它应该将函数体插入到调用站点中。然而,这不再是一个有意义的注释。现代编译器将内联函数或不内联函数,无论是否存在inline资格。

强调一下,编译器是否会执行内联优化完全脱离你的控制.

在现代使用中,内联只有一种功能。它可用于使链接器忽略多个符号,就像在多个编译单元中定义函数时一样。该技术可用于打破循环依赖。将内联用于没有其他目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内联这个函数还是不内联? 的相关文章

随机推荐