现在我有了两个c++源文件:test9.cpptest10.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中的内联f1,在test10.cpp中的内联f1”,谁能告诉我为什么呢?g++编译器如何处理内联函数?
发布于 2013-12-22 14:11:54
而编译器将允许您(不,需要您!)要重新定义标记为inline的函数,外部链接的默认设置仍然适用,因此您违反了“一个定义规则”。这会导致不明确的行为和你所看到的结果。
[C++11: 7.1.2/4]:内嵌函数应在每一个使用odr的翻译单元中定义,并在每种情况下具有完全相同的定义(3.2)。。。
https://stackoverflow.com/questions/20730226
复制相似问题