使内联函数影响其链接?

use*_*635 6 c++ inline function linkage

如果我在内联函数中它是否会改变其与内部链接的联系?例如:我在两个文件中使用或调用内联函数:

file1.cpp

//function definition
inline void foo() {}
Run Code Online (Sandbox Code Playgroud)
file2.cpp
//function definition
inline void foo() {}
Run Code Online (Sandbox Code Playgroud)

为什么我需要在每个文件中定义内联函数才能调用它?我正在建立一个内部联系?如果我使用static inline怎么办?

Mik*_*our 10

如果我在内联函数中它是否会改变其与内部链接的联系?

不,使其内联不会改变其链接.

为什么我需要在每个文件中定义内联函数才能调用它?

因为语言需要它.C++ 11 7.1.2/4表示"内联函数应在每个使用它的翻译单元中定义,并且在每种情况下都应具有完全相同的定义."

我正在建立一个内部联系?

不,它仍然具有外部链接:指向该函数的指针在任何转换单元中具有相同的值,并且在该函数内声明的任何静态对象将是任何转换单元中的相同对象.

如果我使用static inline怎么办?

由于这个原因,这将产生内部联系static.这意味着单独翻译单元中的定义将生成单独的函数,具有不同的地址和任何静态对象的不同副本.

  • @ edA-qamort-ora-y:7.1.2/4还说"具有外部链接的内联函数在所有翻译单元中应具有相同的地址." (2认同)