C++:非类上下文中的静态关键字
C++: Static keyword in non-class context?
下面的静态有意义吗(我来自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(())。
从技术上讲,这是正确的,但看起来不太好。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 为动态创建的数组使用静态关键字有什么意义吗?
- 为什么静态成员函数定义不能有关键字"static"?
- 我可以使用互斥锁或关键字(静态)代替C++中的易失性吗?
- 静态关键字有什么用
- 返回类型后的静态关键字
- C静态关键字与C++私有作用域
- 静态关键字保存函数返回的值
- 静态关键字是否提供任何性能提升
- C++ OpenGL - 这里静态关键字有什么用
- 复数类中的静态关键字错误
- 使用静态关键字复制符号和函数
- C++:非类上下文中的静态关键字
- 不能对 c++ 类实现文件中的静态方法使用 "static" 关键字 (.cpp)
- 静态关键字在这里有帮助吗?
- 如何构造C++使用关键字'this'用于非静态和静态的宏?
- Extern关键字定义静态数据成员和成员函数,c++
- 函数头中的常量和静态关键字之间的区别
- 为什么 C++11 "auto"关键字不适用于静态成员?