在这个答案https://stackoverflow.com/a/4193698/738811中写道“内联函数默认具有外部链接”。但是,默认情况下不可能链接内联的内容。那么说内联函数是否具有外部联系是什么意思呢?
答案 0 :(得分:9)
名称的链接与定义的位置或方式无关,只与名称可用于引用特定对象或函数的位置无关。
声明内联函数不会强制它内联;它只是放宽了一个定义规则,允许在每个翻译单元中使用它的定义(并且在每个翻译单元中需要一个定义),以便更容易内联。如果编译器决定不内联对其的特定调用,或者如果你获取它的地址,它不会阻止生成非内联版本。
所以“外部联动”和“内联”并不是唯一的; “外部链接”表示该函数可以在任何翻译单元中引用,“内联”表示必须在任何调用它的翻译单元中定义它。
答案 1 :(得分:1)
也许更好的表达方式是“如果需要联系,它将是外部的”。这意味着,如果你获取内联函数的地址,那么该地址将在外部可见(不是模块的静态地址)。
答案 2 :(得分:0)
内联函数不一定是内联扩展的。如果不是,语言定义要求只有一个函数副本。
答案 3 :(得分:0)
内联函数通常与其他编译单元“可链接”。它们不会显示为内联函数。编译文件中有一个函数副本。这适用于免费的内联函数。类成员函数不会,通常会获得“非内联”使用的函数副本。好的链接器也会删除代码作为“死代码”,如果它从未被重新引用。