这种特殊情况下的外部常量
extern const in this particular situation
关于在C++中使用extern
和const
还有其他问题。我也读过关于内部和外部链接的文章(我使用C++已经有一段时间了(,但如果有人提醒我以下特定情况的用法,我将不胜感激。
我有两个cpp
文件:Description.cpp和Register.cpp,还有一个hpp
文件:Description。它们有点像
//Description.cpp
#include "Description.hpp"
extern const FD models[];
//some other code
//Register.cpp
#include "Description.hpp"
extern const FD models[2]={
{"elementA",{1,2}},
{"elementB",{3,4}}
};
//Description.hpp
struct FD{
string name;
double v[2];
};
我想知道为什么在Register.cpp 中需要extern关键字
正如评论中所讨论的,默认情况下,const
对象具有内部链接,这意味着您只能从定义它的文件中看到它。要更改这一点,您可以使用关键字extern
,意思是"可以从其他文件中看到此变量"。因此,在Register.cpp
中,您需要extern
来告诉链接器使其在其他地方可见,而在Description.cpp
中,您则需要extern
来告诉编译器它可能在其他地方定义。
更好的解决方案是将声明extern const FD models[];
移动到.hpp
文件中(根据项目的详细信息,可以是Description.hpp
,也可以是新的Register.hpp
(。然后在Description.cpp
和任何其他使用models
的代码中,包含该文件,根本不需要声明。在Register.cpp
中,您还包括此标头。然后编译器知道models
有外部链接,不需要再说extern
。
相关文章:
- 这种特殊情况下的外部常量
- 外部常量,未命名的命名空间
- 默认情况下,非常量变量不被视为外部变量吗?
- 导出类静态常量的未解决外部符号链接错误(仅限某些项目)
- 外部常量字符串的链接错误
- 外部常量链接规范似乎被G++忽略了
- 外部常量阵列不链接
- 类使用全局外部常量变量,该变量通过内部链接定义
- 外部C结构的C++默认复制/移动赋值运算符不是常量
- 如何在另一个命名空间中使用常量定义的外部
- 何时使用外部链接初始化全局常量,避免静态初始化顺序惨败
- 头文件中的“静态”、“外部”、“常量”
- c++中的外部常量
- 当方法是来自外部的常量时,会伪造常量(例如:缓存)
- 在运行时定义的C++全局外部常量可用于多个源文件
- 为什么当在另一个文件中更改外部常量时,链接器不会失败
- 外部常量指针的常量正确性
- 初始化外部常量变量的正式方法是什么?
- 如何为不同文件中的模板参数使用c++外部常量变量
- 将结构传递给具有外部常量模板.外置是干什么用的