如何声明由标题中的函数初始化的全局const?

时间:2017-01-27 20:55:19

标签: c++ c++11

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

const int myVar = myFunc();

我想要的是什么:

  • 作为一个全局的const变量,我想如果它只在二进制文件中链接一次。
  • 因此,在全局变量初始化阶段也只应调用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。 这个变量应该是一个const。是的,我知道它会在一个可写的内存页面上,只有c ++会将它看作一个常量,但这正是我想要的。

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

我该怎么做?

1 个答案:

答案 0 :(得分:4)

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

在.h:

extern const int myVar;

在.cpp:

const int myVar = myFunc();

在C ++ 17中,内联变量将是最佳选择:

inline const int myVar = myFunc();