使内联函数影响其链接?

时间:2011-12-22 14:35:38

标签: c++ function inline linkage

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

file1.cpp

//function definition
inline void foo() {}

file2.cpp
//function definition
inline void foo() {}

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

1 个答案:

答案 0 :(得分:10)

  

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

不,使其内联不会改变其联系。

  

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

因为语言需要它。 C ++ 11 7.1.2 / 4说“内联函数应该在每个使用它的翻译单元中定义,并且应该准确 在每种情况下都有相同的定义。“

  

我正在建立内部联系?

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

  

如果我使用static inline怎么办?

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