簡體   English   中英

C++20 模塊是如何編譯的?

[英]How are C++20 modules compiled?

一些消息來源說編譯器解析模塊並創建抽象語法樹(AST),然后在解析導入模塊的所有代碼文件時使用它。 與 #include 頭文件相比,這將減少編譯器必須執行的解析量,但是對於導入模塊的每個代碼文件,所有內容仍然必須編譯一次。

其他消息來源說模塊只編譯一次。

模塊是如何以及何時編譯的,這對編譯時的內聯有何影響?

模塊編譯的產品是依賴於實現的。 但從廣義上講,它們是編譯器需要它們來使模塊包含有效的任何東西。 畢竟,這就是模塊的全部意義所在。 在構建模塊接口時,編譯器擁有它需要的 100% 的信息,以使包括該模塊接口高效。

模塊編譯與“內聯”只有一個特殊的交互:在 class 定義中定義的 class 的成員函數沒有隱式地給出inline聲明。 這是模塊對“內聯”的唯一影響。

當然, inline關鍵字並不是嚴格意義上的“內聯”。 如果您將事物的定義放在模塊的接口文件中,那么導入這些接口的人可以使用這些定義進行內聯,無論是否使用了inline關鍵字(顯式或隱式)。 這是真正的前置模塊,在模塊構建中仍然如此。

暫無
暫無

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

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