簡體   English   中英

類中定義的函數是否始終內聯?

[英]Is function defined in class always inline?

根據一些書籍,類中定義的函數(以及標題中的定義)始終是內聯的。 真的嗎?

我們如何使用測試應用程序創建此類場景?

在類定義中定義的函數是inline隱式標記的。

[C++11: 9.3/2]:成員函數可以在其類定義中定義(8.4),在這種情況下,它是內聯成員函數(7.1.2),或者可以在其類定義之外定義如果已經聲明但未在其類定義中定義。 [..]

這與他們將被內聯的說法不同。

inline關鍵字對存儲持續時間和鏈接要求有影響, 必須遵守這些要求。

[C++11: 7.1.2/2]:帶有inline說明符的函數聲明(8.3.5,9.3,11.3)聲明了一個內聯函數 內聯說明符向實現指示在調用點處函數體的內聯替換優先於通常的函數調用機制。 在呼叫點執行此內聯替換不需要實現; 但是,即使省略了這種內聯替換,仍應遵守7.1.2定義的內聯函數的其他規則。

但是,現在,您的編譯器將決定是否基於其自身的度量來物理內聯函數,而不是基於inline關鍵字的存在與否(因為,現在,坦率地說編譯器最了解)。

我不知道你有什么“測試應用程序”,但代碼中的一個例子非常簡單:

struct T
{
   void foo() {}  // implicitly `inline`
};

是的,確實,類中定義的成員函數是內聯隱式聲明的。 但是inline只是你給編譯器的一個建議。 編譯器可以忽略它。

如果您想了解不同場景會發生什么,您可以閱讀匯編程序

暫無
暫無

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

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