我习惯于编写这种代码:
//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;
关于c++ - 现在有了内联变量,extern const仍然有用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62239677/