我正在阅读关于inline specifier的内容,我并没有真正理解这一部分:
3)具有外部链接的内联函数或变量(自C ++ 17开始) (例如,未声明为static)具有以下附加属性:1) 必须在每个翻译单元中内联声明。 2)它有 每个翻译单位都有相同的地址。
函数具有相同的地址是什么意思,我甚至不知道函数有内存地址?这是否也意味着内联变量都具有相同的地址,就像它是一个变量一样?如果是这样,为什么甚至使用内联变量?
答案 0 :(得分:2)
函数具有相同的地址是什么意思?
究竟是什么意思。每个翻译单元中的每个相同的内联函数具有相同的地址,即它只是一个相同的函数。为什么这很重要,你会看到。
这是否也意味着内联变量都具有相同的地址,就像它是一个变量一样?
完全。
如果是这样,为什么甚至对变量使用内联?
这就像问为什么使用inline
函数一样。您对头文件中定义的函数使用内联函数,因为它们将在多个转换单元中多次包含。如果它们不是内联的,链接器将看到相同确切函数的多个定义,并且它将抱怨重复的符号。它不知道函数实际上是完全相同的函数。
inline
来到这里。通过标记函数inline
,您可以告诉编译器它始终是相同的函数,即使在多个转换单元中也是如此。对于在头文件中定义的变量,情况也是如此。它们也包含在多个翻译单元中,并且链接器不知道它们应该引用相同的确切变量。 inline
再次解决了这个问题。