c++ - 使函数内联会影响它的链接吗?

标签 c++ function inline linkage

如果我将函数设为内联,它是否会将其链接更改为内部链接?例如: 我在两个文件中使用或调用内联函数:

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/

相关文章:

python - 在一定时间后调用函数并在按下按钮时终止,tkinter

c++ - 内联说明符与类成员一起使用时 undefined reference

c++ - 头文件和源文件中的内联函数

c++ - 从文件读取时将数据保存到指针数组

c++ - 如何避免模板函数返回类型重复?

c++ - 如何用 "float (*fSqrt)(float)"替换 "std::function<float(float) fSqrt>"?

c++ - C++ 和汇编程序之间的 Scanf 函数

c++ - 输入/输出从命令行可执行文件重定向到文件

C++ POD初始化

javascript - 在javascript函数中切换传入变量 boolean 值