繁体   English   中英

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

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

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

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()会被多次调用,这是我不希望的。

我怎样才能做到这一点?

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

在.h中:

extern const int myVar;

在.cpp中:

const int myVar = myFunc();

在C ++ 17中,可以使用内联变量:

inline const int myVar = myFunc();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM