Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器决定不内联函数会导致多个定义吗?_C++_Inline_One Definition Rule - Fatal编程技术网

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 */