C++中static的各种知识点和用法
一、 static关键字的基本概念
1.1 static关键字的作用
在C++中,static关键字可以用于修饰变量、函数和类成员,其作用是改变被修饰对象的存储期、作用域和信息属性。具体来说,static关键字可以使得被修饰对象在程序运行期间一直存在,其作用域局限于定义该对象的源文件中,且具有内部信息属性。
1.2 static关键字的特点
当在全局作用域或命名空间中声明静态变量时,这些变量仅在声明它们的源文件中可见,这意味着在其他文件中无法使用extern关键字来引用这些变量。
在类中声明静态成员时,该成员被所有该类的对象所共享,而不是各自拥有一份副本。
1.3 static关键字的用法
在不同的语境下,static关键字具有不同的用法。在全局作用域或命名空间中声明静态变量时可用于限制其作用域;在函数中声明静态变量时可用于保持其值在函数调用之间的持久性;在类中声明静态成员时可用于实现共享数据和方法。
二、 static修饰局部变量
2.1 静态局部变量的作用
在函数中,使用static关键字声明的局部变量被称为静态局部变量。静态局部变量与普通局部变量的区别在于,静态局部变量的生命周期跨越了函数的多次调用,且只在第一次进入声明点时初始化,之后其值会被保留下来,直到程序结束。
2.2 静态局部变量的示例
```cpp
#include <iostream>
using namespace std;
void count() {
    static intt = 0;
  t++;
    cout << "count: " <<t << endl;
}
int main() {
    count();  // 输出 1
    count();  // 输出 2
    count();  // 输出 3
    return 0;
}
```
2.3 静态局部变量的使用场景
静态局部变量常用于需要保持状态的函数中,例如计数器、累加器等。由于其值在函数调用之间持久保留,可以减少重复初始化的开销,提高程序的效率。
三、 static修饰全局变量
3.1 静态全局变量的作用
在全局作用域中使用static关键字声明的变量被称为静态全局变量。静态全局变量只在声明它们的源文件中可见,其他文件无法通过extern关键字来引用。
3.2 静态全局变量的示例
```cpp
// File1.cpp
#include <iostream>
using namespace std;
static int count = 0;
void increment() {
    count++;
}
// File2.cpp
#include <iostream>
using namespace std;
extern int count;  // 错误,无法引用静态全局变量
```
3.3 静态全局变量的优点
使用静态全局变量可以避免与其他文件中的同名全局变量冲突,提高了程序的模块化和安全性。
四、 static修饰成员变量
4.1 静态成员变量的作用
在类中使用static关键字声明的成员变量被称为静态成员变量。静态成员变量被所有该类的对象所共享,且不占据对象的内存空间,其内存空间在所有对象中只有一份。
4.2 静态成员变量的示例
```cpp
#include <iostream>
using namespace std;
class MyClass {
static修饰的变量public:
    static int count;
};
int MyClass::count = 0;
int main() {
    MyClass obj1;
    MyClass obj2;
    unt = 5;
    cout << unt << endl;  // 输出 5
    return 0;
}
```
4.3 静态成员变量的使用场景
静态成员变量常用于记录该类的所有对象共享的状态信息,例如记录对象数量、实现单例模式等。通过静态成员变量,可以实现数据共享和统一管理,提高程序的灵活性和效率。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。