2017-07-02 92 views
0

我讀有關inline specifier,我真的不演這個角色:內聯函數和變量具有相同的地址?

3)內聯函數或變量(因爲C++ 17)與外部鏈接 (例如未聲明爲static)具有以下附加屬性:1) 必須在每個翻譯單元中內聯聲明。 2)在每個翻譯單元中具有相同的地址 。

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

回答

2

這是什麼意思,函數具有相同的地址?

究竟是什麼意思。每個翻譯單元中的每個相同的內聯函數具有相同的地址,即它只有一個相同的功能。爲什麼這很重要,你會看到。

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

沒錯。

如果是這樣,爲什麼即使使用內聯變量?

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

inline進來這裏。通過標記函數inline,即使在多個翻譯單元中,也可以告訴編譯器它始終是相同的函數。頭文件中定義的變量也是一樣的。它們也包含在多個翻譯單元中,並且鏈接程序不知道它們應該引用相同的確切變量。 inline修復此問題。

相關問題