首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内联函数在C++中是如何工作的?

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

Stack Overflow用户
提问于 2013-12-22 14:04:28
回答 1查看 261关注 0票数 3

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

test9.cpp:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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编译它们,得到以下结果:

代码语言:javascript
复制
inline f1 in test9.cpp
inline f1 in test9.cpp

怎么了?我想应该是:“test9.cpp中的内联f1,在test10.cpp中的内联f1”,谁能告诉我为什么呢?g++编译器如何处理内联函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-22 14:11:54

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

[C++11: 7.1.2/4]:内嵌函数应在每一个使用odr的翻译单元中定义,并在每种情况下具有完全相同的定义(3.2)。。。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20730226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档