如果我将一个函数内联,它是否会将其链接更改为内部链接?例如:我在两个文件中使用或调用内联函数:
file1.cpp
//function definition
inline void foo() {}
file2.cpp
//function definition
inline void foo() {}
为什么我需要在每个文件中定义内联函数才能调用它?我得到一个内部链接?如果我使用static inline
怎么办?
如果我将一个函数内联,它是否会将其链接更改为内部链接?
不,使其内联不会改变它的链接。
为什么我需要在每个文件中定义内联函数才能调用它?
因为语言需要它。C++11 7.1.2/4 说“内联函数应在使用 odr 的每个翻译单元中定义,并且在每种情况下都应具有完全相同的定义。”
我得到一个内部链接?
不,它仍然有外部链接:指向函数的指针在任何翻译单元中都将具有相同的值,并且在函数内声明的任何静态对象在任何翻译单元中都将是相同的对象。
如果我使用
static inline
怎么办?
由于static
. 这意味着单独翻译单元中的定义将产生单独的函数,具有不同的地址和任何静态对象的不同副本。