static的使用

static 的使用

1.1 static声明静态全局变量

static变量只能在定义它的文件中使用。这里的文件指的是cpp源文件。如果在头文件中定义了static变量,那么,所有包含这个头文件的源文件都会定义自己的static变量,而不是使用该头文件中的static变量。其实就是有多少个cpp包含了这个头文件,就存在多少个该变量。这样说可能不是很明白,直接看代码吧!

a.h
static bool test = true;
void print_test();

a.cpp

#include "a.h"
void print_test()
{
	if (test)
	{
		std::cout << "test is true!"<<std::endl;
		return;
	}
	else
	{
		std::cout << "test is false!"<<std::endl;
	}
	return;
}

b.h
#include "a.h"
void b_print_test();

b.cpp
void b_print_test()
{
	test = false;
	if (test)
	{
		std::cout << "test is true!" << std::endl;
		return;
	}
	else
	{
		std::cout << "test is false!" << std::endl;
	}
	return;
}

int main()
{	
	b_print_test();
	print_test();		
}

运行结果如下
在这里插入图片描述
因此使用static定义变量时,放在源文件中,若想声明外部可用的全局变量,可以使用extern关键字。

1.2 static声明静态局部变量

与静态全局变量的区别是,静态全局变量作用域是本文件内,而静态局部变量的作用域是本函数内,一样是在静态存储区分配空间

1.3 static声明函数

static声明的函数有两种

  1. 类内声明的成员函数
    静态成员函数的作用在于:调用这个函数不会访问或者修改任何对象(非static)数据成员。其实很好理解,类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
  2. 普通的全局的静态函数。
    这样的static函数与普通函数的区别是:用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说它可以被其它代码文件调用。
`static`关键字在C语言有多个作用,具体取决于它的使用位置。这里列举了几个常见的`static`用法及其示例: 1. **静态变量(全局或局部)**: - 全局静态变量(外部链接存储类): ``` static int globalVar; // 只有一份拷贝,生命周期从程序开始到结束 ``` - 局部静态变量(内部链接存储类): ``` void func() { static int localVar; // 每次函数调用都会创建一个新的局部静态变量,但只初始化一次 } ``` 2. **静态函数**: - 它们属于特定的类,全局静态函数不能直接访问非静态成员: ``` class MyClass { static void staticFunction(); // 可被类的所有实例共享 }; ``` 3. **静态数组**: - 全局静态数组: ``` static int arr[10]; // 全局范围内的静态数组,所有源文件可见 ``` - 函数内静态数组: ``` void function() { static int localArr[5]; // 在栈上分配空间,每次进入函数时初始化 } ``` 4. **静态局部对象**: 这种情况下,静态局部变量在每次函数调用时会被自动初始化,但其值会在函数退出后保留: ``` void function() { static int result = someComputation(); } ``` 5. **静态成员函数/数据成员**: 对于类,`static`用于表示静态成员,它们不属于特定对象,而是属于整个类的实例: ``` class MyClass { static void staticMethod(); // 类级别的方法,不需要创建对象就能访问 static int staticData; }; ``` 在使用`static`时要考虑到内存管理、作用域以及对性能的影响。了解这些用法后,请告诉我您感兴趣的具体方面,或者有其他疑问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值