如何声明由标头中的函数初始化的全局常量

How to declare a global const initialized by a function in the header?

本文关键字:函数 初始化 常量 全局 何声明 声明      更新时间:2023-10-16

我有一个旧的源代码,像这样,在我的项目中的许多地方使用的标题中:

const int myVar = myFunc();

我想要什么:

  • 作为一个全局常量变量,我希望它在二进制文件中只链接一次
  • 因此,在全局变量初始化阶段也应该只调用myFunc()一次

现在的问题是,我从我编译的.cc中得到了这个警告:

In file included from mySource.cc:7:0:
myHeader.h:59:11: warning: ‘myVar’ defined but not used [-Wunused-variable]
const int myVar = myFunc();
^

注意,mySource.cc确实没有使用myVar,因此警告是可以的,但其他来源是可以的。

我认为,如果我只在标题中声明myVar,最好是这样的:

myHeader.h:

int myVar;

mySource.cc:

int myVar = myFunc();

但在这种情况下,我不能将其声明为const这个变量应该是常量是的,我知道它会在一个可写的内存页上,只有c++会把它看作一个常量,但这正是我想要的。

因此,我也希望避免这种警告。此外,我认为myFunc()会被调用很多次,这是我不想要的。

我该怎么做?

您必须拆分定义和声明,并在cpp文件中定义变量,如下所示:

英寸:

extern const int myVar;

In.cpp:

const int myVar = myFunc();

在C++17中,内联变量是可行的:

inline const int myVar = myFunc();