【发布时间】:2020-11-11 23:33:27
【问题描述】:
我知道编译器可以决定是否内联函数。假设有人在头文件中将函数定义为inline,并且函数体也在头文件中。另外,假设函数很长,编译器决定不实际内联这个函数。
f1.h:
inline void f1()
{
/* really long function */
}
当函数包含在多个 cpp 翻译单元中时,现在会发生什么情况——这不会破坏one definition rule 并在链接时导致多个定义吗?还是 inline 属性仍然存在,即使它实际上没有内联?
foo.cpp:
#include "f1.h"
/* code here */
bar.cpp:
#include "f1.h"
/* code here */
【问题讨论】:
-
您研究过
inline的含义吗?请参阅解释中的cppreference inline specified2.点。 -
编译器是否内联函数并不重要。关键字
inline是你对编译器的承诺,上面写着“这个函数可能有多个定义,但我保证它们都是相同的,允许在 ODR 下使用”。
标签: c++ inline one-definition-rule