内联函数在C++中是如何工作的

how does the inline function work in C++?

本文关键字:何工作 工作 函数 C++      更新时间:2023-10-16

现在我有两个c++源文件:test9.cpp test10.cpp,它们都有一个同名的内联函数。

test9.cpp:

1 #include <iostream>
2 using namespace std;
3 void test();
4 inline void f1()
5 {
6     cout << "inline f1 in test9.cpp" << endl;
7 }   
8 int main()
9 {
10     f1();
11     test();
12     return 0;
13 } 

test10.cpp:

1 #include <iostream>
2 using namespace std;
3 inline void f1()
4 {
5     cout << "inline f1 in test10.cpp" << endl;
6 }   
7 void test()
8 {
9     f1();
10 } 

现在用g++编译它们:g++test9.cpp test10.cpp/a.out我得到以下结果:

inline f1 in test9.cpp
inline f1 in test9.cpp

怎么了?我原以为是:"test9.cpp中的inline f1 test10.cpp中的inlinef1"谁能告诉我为什么?g++编译器如何处理内联函数?

虽然编译器允许您(不,需要您!)重新定义标记为inline的函数,但外部链接的默认值仍然适用,因此您违反了一个定义规则。这会导致未定义的行为和你所看到的结果。

[C++11: 7.1.2/4]:内联函数应在使用它的每个翻译单元中定义,并且在任何情况下都应具有完全相同的定义(3.2)。[..]