两个源文件之间的变量(类和全局)
Variable between two source files (class & global)
考虑有一个由一个.cpp
文件处理的变量,而其他.cpp
文件将该变量的值用于各种目的。
与类一起使用时
// header.h
class c {
public:
static int f1();
static int f2();
private:
static int v;
};
// first.cpp
int c::v(0);
int c::f1() { return ++v; }
// second.cpp
int c::f2() { return ++v; }
// main.cpp
int main() {
cout << c::f1() << endl;
cout << c::f2() << endl;
return 0;
}
输出为:
1
2
在全球范围内使用时
// header.h
int f1();
int f2();
static int v = 0;
// first.cpp
int f1() { return ++v; }
// second.cpp
int f2() { return ++v; }
// main.cpp
int main() {
cout << f1() << endl;
cout << f2() << endl;
return 0;
}
输出为:
1
1
为什么当所述变量在类中时,输出是您所期望的,否则则不是?(我知道在第二部分中使用 extern
会给出想要的结果,问题是为什么static
适用于类而不是全局范围?
static
在C++中具有不止一个含义(语言设计者实际上经常这样做,以减少保留关键字的数量)。
类中的
static
意味着它是类的所有实例共享的变量。static
在编译单元中意味着无法在不同的编译单元中寻址它。在本例中,您在标题中写了static
;预处理器(通过"#include")将其插入到可编译的源文件中。在包含此标头的每个源文件中,它只是意味着这是此编译单元的本地变量。
-
关键字
static
,当在class
中使用时,表示该类的成员由它的所有实例共享。所以每次v
以class c
递增时,它都会返回一个大于前一个值的值。 -
但是当关键字
static
在全局空间中使用时,与对象无关。 全局空间中的static
意味着只有变量v
可以从声明/定义它的.cpp
文件中访问,并且在该文件#include
d的文件中访问变量。并且无法从其他地方访问。 -
OOP中的
static
与非OOP中的static
完全不同。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- 如何使用 llvm-10 库在C++定义 LLVM 全局值变量?
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 在.cpp文件之间传递全局字符串变量?
- 默认情况下是Python变量全局