【问题标题】:can compiler deciding not to inline a function lead to multiple definitions?编译器决定不内联函数会导致多个定义吗?
【发布时间】: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 specified 2. 点。
  • 编译器是否内联函数并不重要。关键字inline 是你对编译器的承诺,上面写着“这个函数可能有多个定义,但我保证它们都是相同的,允许在 ODR 下使用”。

标签: c++ inline one-definition-rule


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 2016-12-07
    • 2012-01-17
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2021-11-17
    相关资源
    最近更新 更多