c++ - 既然我们有内联变量,还有用 extern const 吗?
问题描述
我习惯于编写这种代码:
//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 变量(as 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;
推荐阅读
- ansible - Ansible:使用 regexp 和 backrefs 的 lineinfile 模块
- sql - 如何编写 SQL 查询来更改顺序并截断 JSON 有效负载中的元素?
- python - 如何在 Tkinter 中将 Notebook 选项卡分为两个部分?
- authentication - 尝试在 Drupal 7 中访问未发布的内容页面时如何将用户重定向到登录页面
- regex - 如何选择具有一定间隔的所有空格
- cloud-foundry - HTML5 应用程序 (Cloud Foundry) - 404 Not Found nginx
- redirect - IIS 重定向 多个域允许一个访问文件夹 - 拒绝访问另一个
- python - 如何将 mpmath 和 sympy 添加到 buildozer 要求中
- r - 如何使用设备进行并行绘图?
- machine-learning - 在哪里可以找到 BIG 数据集