我习惯于编写这种代码:

//myInclude.h
extern const Type var;
//mySource.cpp
#include "myInclude.h"
const Type var = ...;

...但是现在我可以写了
//myInclude.h
inline const Type var = ... ;

还是仍然可以使用extern constexterninline变量是否已过时?

最佳答案

inline并未使extern const过时,因为它们不是“正交”的。

externinline应用于非模板const变量的声明(作为var)时,声明var没有内部链接。我想这就是为什么人们可能认为inline使extern没用的原因。

但是externinline也具有不同的语义:

  • 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/

    10-13 09:29