编译器决定不内联函数会导致多个定义吗?
can compiler deciding not to inline a function lead to multiple definitions?
我知道编译器可以决定是否内联一个函数。假设有人在头文件中将函数定义为 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
并且函数体也在头文件中。另外,假设函数很长,编译器决定不实际内联这个函数。
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 */
简而言之:编译器在编译过程中做出的任何“优化决定”都不会导致编译错误。所以答案是否定的。