gpt4 book ai didi

c++ - 如果不使用内联,为什么会收到链接错误?

转载 作者:太空狗 更新时间:2023-10-29 23:51:17 25 4
gpt4 key购买 nike

在下面的classA.h

bool IsEqual(const float a, const float b)
{
return std::fabs(a-b) < std::numeric_limits<float>::epsilon();
}

我收到一个链接错误

ld: 10 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我添加 inline,一切都很好。

我想知道为什么我必须添加 inline

最佳答案

当在多个翻译单元中找到此函数定义时(通常是 header 的情况,因为您通常在多个翻译单元中包含 header ,否则它们有什么意义?)您会从链接器中获得多个定义错误。

每个函数只允许一个定义。

但是标记函数 inline 是一种特殊情况,它允许您在多个翻译单元中拥有此定义,只要定义相同即可。语言必须提供这一点,因为内联函数在定义立即可用时最有效(即在同一个翻译单元中,即可能在标题中); inline 在这个 super 智能优化器的现代时代并没有真正固有地导致实际内联并没有改变语言的这一事实。

关于c++ - 如果不使用内联,为什么会收到链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505333/

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