C++ 编译器决定不内联函数会导致多个定义吗?
我知道编译器可以决定是否内联函数。假设有人在头文件中将函数定义为C++ 编译器决定不内联函数会导致多个定义吗?,c++,inline,one-definition-rule,C++,Inline,One Definition Rule,我知道编译器可以决定是否内联函数。假设有人在头文件中将函数定义为inline,函数体也在头文件中。另外,假设函数很长,编译器决定不实际内联此函数 f1.h: 当函数包含在多个cpp翻译单元中时,它现在会发生什么情况?这会不会破坏链接并在链接时导致多个定义?或者,即使它实际上不是内联的,该inline属性是否仍然存在 foo.cpp: #include "f1.h" /* code here */ bar.cpp: #include "f1.h" /* c
inline
,函数体也在头文件中。另外,假设函数很长,编译器决定不实际内联此函数
f1.h:
当函数包含在多个cpp翻译单元中时,它现在会发生什么情况?这会不会破坏链接并在链接时导致多个定义?或者,即使它实际上不是内联的,该inline
属性是否仍然存在
foo.cpp:
#include "f1.h"
/* code here */
bar.cpp:
#include "f1.h"
/* code here */
简而言之:编译器在编译过程中做出的任何“优化决策”都不会导致编译错误。因此答案是否定的。简而言之:编译器在编译过程中做出的任何“优化决策”都不会导致编译错误。所以答案是否定的。你研究过
inline
的意思吗?请参阅解释中的2.
点。编译器内联是否起作用并不重要。关键字inline
是您对编译器的承诺,它说“这个函数可能有多个定义,但我保证它们都是相同的,允许在ODR下使用”。有些关联:您研究过inline
的含义吗?请参阅解释中的2.
点。编译器内联是否起作用并不重要。关键字inline
是您对编译器的承诺,它说“这个函数可能有多个定义,但我保证它们都是相同的,允许在ODR下使用”。有些关联:
#include "f1.h"
/* code here */