gpt4 book ai didi

c++ - 头文件中实现的函数的静态 vs 内联

转载 作者:IT老高 更新时间:2023-10-28 21:38:44 35 4
gpt4 key购买 nike

我认为 C++ 中的 inline 的方式是用于链接/作用域。我将它与 externstatic 放在同一个篮子中用于全局对象。

通常对于在头文件中实现的函数,我的首选解决方案是将其设为静态:

// In Foo.h
static void foo()
{
// Do stuff...
}

不过,我相信这也是有效的,似乎并没有违反 ODR:

// In Foo.h
inline void foo()
{
// Do stuff...
}

两者之间的语义差异是什么?此外,我不确定 C++ 标准的哪些领域会解释确切的差异,或者它是否只是未定义且差异在于实现。

最佳答案

inline 准确地传达了您想要的内容:“请禁止此函数的 ODR(一个定义规则),以便每个翻译单元可以(并且必须)提供自己的函数定义拷贝” .

然后编译器要么内联调用函数,要么将来自不同 TU 的函数定义合并在一起(这样生成的函数在可执行文件中存在一次)。

另一方面,

static 告诉编译器在定义它的每个翻译单元中生成函数,而不是共享它。因此,您最终会在生成的可执行文件中存在任意数量的技术上独立的函数。

简而言之,如果你使用static,那么在不同的翻译单元中获取函数的地址将返回不同的地址(因为你告诉编译器在每个TU中生成一个函数) ,但如果您使用 inline,它们将显示相同的地址(因为您定义了 one 函数,并且只是告诉编译器将许多定义合并在一起)。

关于c++ - 头文件中实现的函数的静态 vs 内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102919/

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