如果我将函数设为内联,它是否会将其链接更改为内部链接?例如: 我在两个文件中使用或调用内联函数:
file1.cpp
//function definition
inline void foo() {}
file2.cpp
//function definition
inline void foo() {}
为什么我需要在每个文件中定义内联函数才能调用它?我得到一个内部链接?如果我使用 static inline
会怎样?
最佳答案
If I make a function inline does it change its linkage to internal linkage?
不,将其内联并不会改变其链接。
Why do I need to define the inline function in each file to be able to call it?
因为语言需要它。 C++11 7.1.2/4 说“内联函数应在每个使用它的翻译单元中定义,并且应具有准确的 在每种情况下都使用相同的定义。”
I'm getting an internal linkage?
不,它仍然有外部链接:指向函数的指针在任何翻译单元中都将具有相同的值,并且函数内声明的任何静态对象在任何翻译单元中都将是相同的对象。
What if I use
static inline
?
由于 static
,这将提供内部链接。这意味着不同翻译单元中的定义将产生不同的函数,具有不同的地址和任何静态对象的不同拷贝。
关于c++ - 使函数内联会影响它的链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605362/