内联函数和变量具有相同的地址?

时间:2017-07-02 14:34:50

标签: c++

我正在阅读关于inline specifier的内容,我并没有真正理解这一部分:

  

3)具有外部链接的内联函数或变量(自C ++ 17开始)   (例如,未声明为static)具有以下附加属性:1)   必须在每个翻译单元中内联声明。 2)它有   每个翻译单位都有相同的地址。

函数具有相同的地址是什么意思,我甚至不知道函数有内存地址?这是否也意味着内联变量都具有相同的地址,就像它是一个变量一样?如果是这样,为什么甚至使用内联变量?

1 个答案:

答案 0 :(得分:2)

  

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

究竟是什么意思。每个翻译单元中的每个相同的内联函数具有相同的地址,即它只是一个相同的函数。为什么这很重要,你会看到。

  

这是否也意味着内联变量都具有相同的地址,就像它是一个变量一样?

完全。

  

如果是这样,为什么甚至对变量使用内联?

这就像问为什么使用inline函数一样。您对头文件中定义的函数使用内联函数,因为它们将在多个转换单元中多次包含。如果它们不是内联的,链接器将看到相同确切函数的多个定义,并且它将抱怨重复的符号。它不知道函数实际上是完全相同的函数。

inline来到这里。通过标记函数inline,您可以告诉编译器它始终是相同的函数,即使在多个转换单元中也是如此。对于在头文件中定义的变量,情况也是如此。它们也包含在多个翻译单元中,并且链接器不知道它们应该引用相同的确切变量。 inline再次解决了这个问题。