1. 静态局部变量
定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的
当 static 修饰局部变量时:
● 变量的存储区域由栈变为静态常量区。
● 变量的生命周期由局部变为全局。
● 变量的作用域不变。
函数调用开辟栈帧,函数中的局部变量在栈上分配存储空间,当函数执行完毕,函数栈帧销毁,栈空间由系统回收。而静态局部变量自从初始化后会保留下来,知道下一次运行改程序。
2. 静态全局变量
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。
当 static 修饰全局变量时:
● 变量的存储区域在全局数据区的静态常量区。
● 变量的作用域由整个程序变为当前文件。(extern声明也不行)
● 变量的生命周期不变。
一个全局变量被 static 修饰,使全局变量只能在定义变量的当前文件使用,不能在其余文件使用,即使 extern外部声明也不行。
3. static 修饰函数
函数的作用域与全局变量一样都是整个程序。
当 static 修饰函数时:
● 函数的作用域由整个程序变为当前文件。(extern声明也不行)
一个函数被 static 修饰,使函数只能在定义的源文件使用,不能在其余文件使用,即使 extern外部声明也不行。(同static 修饰全局变量)
4.类的static
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的 成员函数,称之为静态成员函数。
有以下特性:
1.静态成员函数和静态成员数据的存储区域和某个类的存储区域不在一处,它们单独存储于某个存储空间。
2.静态成员函数没有this,可以通过对象调用,也可以通过class调用,它属于该类所有的对象。
3.在类外要完成静态存储数据的初始化。
5.类模板
例如
template<class T>
const T& min(const T& a,const T & b)
{
return b<>a?b:a;
}
6.namespace
可以在代码头加一句using namespace std全部解开
也可以使用using namespace::cout 解开一个