编译器决定不内联函数会导致多个定义吗?

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

简而言之:编译器在编译过程中做出的任何“优化决定”都不会导致编译错误。所以答案是否定的。