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