什么是外部内联'功能和何时使用?

时间:2014-12-24 22:43:48

标签: c++ c++14

有这样的事情,它出现在最新的C ++草案中:

§7.1.2.4:

  

应在每个翻译单元中定义内联函数   它是使用过的,并且每个都有完全相同的定义   案例(3.2)。 [注意:可能会遇到对内联函数的调用   在其定义出现在翻译单元之前。 - 结束说明]如果   函数的定义出现在它之前的翻译单元中   第一次声明为内联,该程序是不正确的。 如果是一个功能   与外部链接在一个翻译单元中内联声明,它   应在其出现的所有翻译单位内联宣布;   无需诊断。具有外部链接的内联函数   在所有翻译单元中具有相同的地址。一个静态的本地   外部内联函数中的变量总是指相同的   宾语。在extern内联函数体内定义的类型是   每个翻译单元都使用相同的类型。

关于这是什么以及何时使用它的一些见解?

2 个答案:

答案 0 :(得分:3)

extern对于函数是多余的,因此声明函数extern inline是没有意义的。例如,如果您在全局范围内声明了函数inline,则适用本节的规则。同样,如果您在全局范围内声明了一个类并在类定义中定义了一个成员函数,那么这个函数将隐式地 inline

你何时应该声明一个函数inline的问题是一堆蠕虫,我不打算在这里打开。请参阅:When should I write the keyword 'inline' for a function/method?

答案 1 :(得分:0)

我不熟悉C ++中的此草稿功能以及它是否已成为标准。我认为这可能是从C借来的功能。


在C语言中(我认为是C99?),extern inline用于源文件,而不是头文件。指示工具从该源产生的目标文件应该是包含最终实现的文件。没有它,链接器必须选择一个站点或复制符号。

例如,在my_alloc.h中:

inline char *my_alloc(size_t len) { return (char*)malloc(len); }

my_alloc.c中:

extern inline char *my_alloc(size_t len);