主要是static的使用 总结为如下
1
在 C 中,static
用于局部变量:当 static
用于函数内的局部变量时,它会改变这个变量的存储类型,使其从自动存储(函数调用时分配,函数返回时释放)变为静态存储(程序启动时分配,程序结束时释放)。这意味着即使函数返回,这个变量也会保持其值,直到下次函数调用。
void func() {
static int x = 0;
x++;
printf("%d\n", x);
}
在这个例子中,每次调用 func()
,x
的值都会增加,而不是被重置为 0。
也就是你是可以在这个函数外面去定义同名的static变量的 比如说static int x=1;全局变量这样 其实就是把动态分配的内存(运行时分配)改为静态了 (编译时分配) 你只能通过这个函数去调用这个变量 但是每调用一次 它的值会+1 你退出了 这个变量还是+1的状态不会被初始化。
2
在 C 中,static
用于全局变量:static
全局变量的存储期与普通全局变量相同,但其链接属性不同。static
全局变量只在定义它的文件中可见,这使你可以在不同的文件中定义同名的 static
全局变量,而不会引起冲突。
// file1.c
static int x = 1; // 只在 file1.c 中可见
// file2.c
static int x = 2; // 只在 file2.c 中可见,与 file1.c 中的 'x' 不冲突
这个就是在不同的.c文件中去定义全局变量是可以的 即使你在.h文件中声明一个全局变量 但是每个.c文件还是会得到不同的副本
3
在 C 中,static
用于函数:static
函数只在定义它的文件中可见。这使你可以在不同的文件中定义同名的 static
函数,而不会引起冲突。这是一种封装技术,可以防止函数被意外调用。
// file1.c
static void func() { /* ... */ } // 只在 file1.c 中可见
// file2.c
static void func() { /* ... */ } // 只在 file2.c 中可见,与 file1.c 中的 'func()' 不冲突
4
在 C++ 中,static
用于类成员变量:static
类成员变量是类的所有实例共享的。它们在程序的生命周期内只有一份拷贝,不像非 static
成员变量那样每个实例都有一份拷贝。你可以通过类名(而不是实例)来访问 static
类成员变量。
class MyClass {
public:
static int x; // 所有 MyClass 的实例共享同一份 'x'
};
5
在 C++ 中,static
用于类成员函数:static
类成员函数可以在没有类的实例的情况下被调用。它们只能访问类的 static
成员变量或函数,因为它们没有 this
指针。
class MyClass {
public:
static void func() { /* 只能访问 MyClass 的 static 成员 */ }
};
在这个例子中,你可以通过 MyClass::func()
来调用 func()
,而不需要创建 MyClass
的实例。、
6 const 和static不能同时修饰成员函数 因为静态成员函数没有this指针 不能实例化 而const成员函数必须具体到某一实例 static修饰成员函数也不能声明为virtual