c++ - 现在有了内联变量,extern const仍然有用吗?

标签 c++ inline extern c++20

我习惯于编写这种代码:

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

    相关文章:

    c++ - 函数模板的部分排序和非推导上下文在 MSVC 2017 中不起作用

    c++ - 如何将一维数组作为二维数组访问?

    c++ - 使用来自另一个类 SFML c++ 的函数时,Sprite 不会移动

    ASP.NET内联编码: variable name is not replaced with value

    c - 内联函数与宏函数

    c - 为什么我得到 "undefined reference"- 变量标记为 'extern' 的错误?链接器问题?

    使用指针数组调用函数

    c++ - C++ 宏可以计算 switch 语句中的案例吗?

    javascript - 在 Wordpress 帖子中使用 jQuery

    C++11 外部模板 : where do we actually need them?