C ++:非类上下文中的静态关键字?

时间:2014-10-28 20:02:38

标签: c++ static

下面的静态是否有意义(我来自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

2 个答案:

答案 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())。

从技术上讲,这是正确的,但它看起来并不好。