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

C++: Static keyword in non-class context?

本文关键字:静态 关键字 上下文 C++      更新时间:2023-10-16

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

在这样的上下文中,static关键字表示文件范围,如C中所示。
可能不是您想要的公共标头。

你想要的可能是extern,在你的头文件中:

extern const int a;
extern const int a;

它将声明两个全局变量
然后,您将需要一个定义,在一些.cpp文件中:

const int a = 42;
const int b = 43;

关于文件范围,这意味着这样一个声明的可见性将局限于声明它的文件。链接器不会为此生成公共符号
因此,如果在头文件中使用它,则在包含头的每个文件中都会发出不同的声明。

假设它是一个标头,这个"const-static"常量看起来不太好。。。它所做的是在EACH源文件中创建"local"(文件范围-因此仅在文件中可见)常量,该文件包括您的头。因此,如果你在10个源文件中包含这个头,你会得到这个常量的10个副本,10个对func()的调用等。所有这些可能都有相同的值(这取决于func(())。

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