内联函数在C++中是如何工作的
how does the inline function work in C++?
现在我有两个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)。[..]
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?