首页 > 解决方案 > 既然我们有内联变量,还有用 extern const 吗?

问题描述

我习惯于编写这种代码:

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

...但现在我可以写了

//myInclude.h
inline const Type var = ... ;

extern constextern一般情况下还有用吗?变量是否已经inline过时?

标签: c++inlineexternc++20

解决方案


inline没有extern const过时,因为它们不是“正交的”。

extern并且inline当应用于非模板 const 变量(as var)的声明时,声明var没有内部链接。我想这就是为什么人们可能认为这样inlineextern没有用。

externinline有不同的语义:

  • extern出现在声明中时,它意味着该声明不是定义。这并不一定意味着该变量不是内联的或它是在其他翻译单元中定义的。

  • inline意味着声明是一个定义,并且这个相同的定义可能出现在其他翻译单元中。

因此,extern const当定义可以出现在特定的翻译单元中时,变量声明可能仍然有用。这可用于提高大型项目的编译速度。

extern 的另一个用途是前向声明 const 变量。甚至前向声明 constexpr :

 extern const int var;
 // some code that odr-use var
 inline constexpr int var = 10;

推荐阅读