这种特殊情况下的外部常量

extern const in this particular situation

本文关键字:外部 常量 特殊情况下      更新时间:2023-10-16

关于在C++中使用externconst还有其他问题。我也读过关于内部和外部链接的文章(我使用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