簡體   English   中英

什么是“外部內聯”函數以及何時使用?

[英]What is an 'extern inline' function and when to use?

有這樣的事情,它在最新的 C++ 草案中:

在第 7.1.2 .4 節:

內聯函數應在每個使用 odr 的翻譯單元中定義,並且在每種情況下都應具有完全相同的定義(3.2)。 [ 注意:在其定義出現在翻譯單元中之前,可能會遇到對內聯函數的調用。 — end note ] 如果函數的定義出現在其第一次聲明為內聯之前的翻譯單元中,則程序格式錯誤。 如果一個帶有外部鏈接的函數在一個翻譯單元中被聲明為內聯,則它應該在它出現的所有翻譯單元中被聲明為內聯; 不需要診斷。 具有外部鏈接的內聯函數在所有翻譯單元中應具有相同的地址。 extern 內聯函數中的靜態局部變量總是指向同一個對象。 在 extern 內聯函數體內定義的類型在每個翻譯單元中都是相同的類型。

關於這是什么以及何時使用它的一些見解?

extern對於函數來說是多余的,所以聲明一個函數extern inline是沒有意義的。 例如,如果您在全局范圍inline聲明了一個inline函數,則本節的規則將適用。 同樣,如果您在全局范圍內聲明了一個類並在類定義中定義了一個成員函數,那么這樣的函數將是隱式inline

什么時候應該聲明一個inline函數的問題是一堆我不想在這里打開的蠕蟲。 請參閱: 何時應該為函數/方法編寫關鍵字“內聯”?

我不熟悉 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM