我应该实现一个比较两个相似字符串的函数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(使用前将#替换为@)