标签:静态函数 tle 实现 inf code class 调用 void 语句
今天看到static关键字,对其朦朦胧胧的,所以专门查找了一下相关的定义和说明来深入理解
参考文章 : C/C++中STATIC用法总结
使用Static的作用主要有两种:
- 第一个作用是限定作用域
- 第二个作用是保持变量内容持久化
用法: 在全局变量前加上关键字static,全局变量就定义成一个全局的静态变量。
内存中的位置:静态存储区,整个程序运行过程中一直存在
作用域:全局静态变量在声明它的文件之外是不可见的,也就是说作用在声明所在的文件中
在局部变量之前加上关键字static,局部变量就成为一个局部静态变量
内存中的位置:静态存储区
初始化:未经过初始化的全局静态局部变量会自动初始化为0
作用域:作用域仍然为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。当局部静态变量离开作用域之后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能对它进行访问,之道函数再次调用的时候,值依然保持不变。
class A
{
private:
static int value;
}
在Cpp中必须对静态变量进行初始化,
初始化时,使用作用域运算符来标明其所属的类,其属于所有成员共有,只有一个拷贝。
class A
{
private:
static int func(int x);
}
实现的时候也不需要static的修饰,因为static是声明性关键字;
类的静态函数是该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;
实际上,他就是增加了类的访问权限的全局函数;
void A::func(int);
静态成员函数可以继承和覆盖,但无法是虚函数;
在cpp文件的全局范围内声明:
static int val = 0;
这个变量的含义是该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;
函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;
warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰;
这里使用GetMyType()
的操作,通过Static的方式来获取智能指针
测试发现,使用静态变量后,Get的操作都是相同的内容,而且Type只创建了一次。
由于类中使用了静态变量,所以类只有程序退出的时候才会完全析构。
标签:静态函数 tle 实现 inf code class 调用 void 语句
原文地址:https://www.cnblogs.com/EltonLiang/p/9141036.html