簡體   English   中英

內聯函數和變量具有相同的地址?

[英]Inline functions and variables have same address?

我正在閱讀有關內聯說明符的信息 ,但我並沒有真正理解這一部分:

3)具有外部鏈接(例如,未聲明為靜態)的內聯函數或變量(自C ++ 17起)具有以下附加屬性:1)必須在每個轉換單元中內聯聲明。 2)每個翻譯單元都有相同的地址。

函數具有相同的地址是什么意思,我什至不知道函數具有一個內存地址? 這是否還意味着內聯變量都具有相同的地址,就像它是一個變量一樣? 如果是這樣,為什么還要對變量使用內聯?

函數具有相同的地址是什么意思?

確切地說。 每個翻譯單元中的每個相同的內聯函數都具有相同的地址,即,它只是一個相同的函數。 為什么這很重要,您會看到。

這是否還意味着內聯變量都具有相同的地址,就像它是一個變量一樣?

究竟。

如果是這樣,為什么還要對變量使用內聯?

這就像問為什么要使用inline函數。 您將內聯函數用於頭文件中定義的函數,因為它們將被多次包含在多個翻譯單元中。 如果它們不是內聯的,則鏈接器將看到相同確切函數的多個定義,並且將抱怨符號重復。 它不知道這些功能實際上是完全相同的功能。

inline進來這里。 通過將函數標記為inline ,您可以告訴編譯器即使在多個轉換單元之間,它始終是相同的函數。 頭文件中定義的變量也是如此。 它們也包含在多個翻譯單元中,鏈接器不知道它們應該引用相同的確切變量。 inline再次解決此問題。

暫無
暫無

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

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