如何声明由标头中的函数初始化的全局常量
How to declare a global const initialized by a function in the header?
我有一个旧的源代码,像这样,在我的项目中的许多地方使用的标题中:
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();
相关文章:
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 我们是否需要为 C++ 中的多个函数初始化多个模板?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 我们可以用参数化构造函数初始化结构的数组吗?
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 类内初始化与构造函数初始化列表的顺序
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- 使用复制构造函数初始化 new[]
- 如何从子类的构造函数初始化父类的私有成员
- 在构造函数初始化列表中使用 std::variant
- 使用构造函数初始化结构还是在之后设置其值更好?
- C++ 没有匹配的构造函数初始化 []
- 我正在使用dev c ++,但收到错误(C++98'array'必须由构造函数初始化)
- 如何从静态类函数初始化静态类对象
- 使用所述填充构造函数初始化向量中的向量
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- 使用 c++ 中的函数初始化数组
- 使用 lambda 函数初始化静态数据成员