下面的静态是否有意义(我来自Java背景)?它编译,但是什么是约定/标准?
#ifndef FUNC_H
#define FUNC_H
int func(const int& x, const int& y);
//cache frequently used values
const static int a = func(2, 0);
const static int b = func(3, 0);
#endif // FUNC_H
答案 0 :(得分:3)
在这种情况下,static
关键字表示文件范围,如C.
可能不是你想要的公共标题。
您想要的可能是extern
,在您的标头文件中:
extern const int a;
extern const int a;
它将声明两个全局变量 在某些 .cpp 文件中,您需要一个定义:
const int a = 42;
const int b = 43;
关于文件范围,这意味着此类声明的可见性将仅限于声明它的文件。链接器不会为此生成公共符号 因此,如果您在头文件中使用它,则会在包含标头的每个文件中发出不同的声明。
答案 1 :(得分:2)
假设它是一个标题,这个" const static"常数并不好看......它的作用是创造"本地" (文件范围 - 仅在文件中可见)常量在包含标头的 EACH 源文件中。因此,如果你在10个源文件中包含这个标题,你将获得10个这个常量的副本,10个调用func()等等。所有这些都可能具有相同的值(它取决于func())。
从技术上讲,这是正确的,但它看起来并不好。