gpt4 book ai didi

c++ - 是否内联这个函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:19 25 4
gpt4 key购买 nike

我应该实现一个比较两个字符串的函数 simliar 所以 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 限定,现代编译器都会内联或不内联函数。

要强调的是,编译器是否会执行内联优化完全不在您的掌控之中

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

关于c++ - 是否内联这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com