我习惯于编写这种代码:
//myInclude.h
extern const Type var;
//mySource.cpp
#include "myInclude.h"
const Type var = ...;
...但是现在我可以写
//myInclude.h
inline const Type var = ... ;
extern const
还是extern
仍然有用? inline
变量是否已过时?
[inline
尚未使extern const
成为过时,因为它们不是“正交的”。]]
extern
和inline
应用于示例中非模板const变量的声明为var
时,请声明var
没有内部链接。我想这就是为什么人们可能会认为inline
使extern
没有用。
但是extern
和inline
也有不同的语义:
当extern
出现在声明中时,表示该声明不是定义。它并不一定意味着该变量不是内联变量,也不是在另一个翻译单元中定义。
[inline
表示声明是一个定义,并且该定义可以出现在其他翻译单元中。
因此,当extern const
变量声明可以出现在特定的翻译单元中时,它可能仍然是用完的。这对于提高编译速度仍然非常有用。
extern的另一种用法是用于const变量的正向声明。甚至constexpr的前向声明:
extern const int var;
// some code that odr-use var
inline constexpr int var = 10;