静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快不少。
关键字“static”,译成中文就是“静态的”,因此内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的做用域仅局限于本文件。 使用内部函数的好处是:不一样的人编写不一样的函数时,不用担忧本身定义的函数,是否会与其它文件中的函数同名,由于同名也没有关系。
c语言中static的语义1.static变量:1).局部a.静态局部变量在函数内定义,生存期为整个源程序,但做用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。2).全局全局变量自己就是静态存储方式, 静态全局变量固然也是静态存储方式。可是他们的做用域,非静态全局 变量的做用域是整个源程序(多个源文件能够共同使用); 而静态全局变量则限制了其做用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。2.static函数(也叫内部函数)只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于通常的非静态函数(外部函数) static在c里面能够用来修饰变量,也能够用来修饰函数。 先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实咱们平时所说的堆栈是栈而不包含对,不要弄混。函数
2.C++程序的静态变量和函数this
2.1 静态成员函数spa
(1)静态成员函数一般用于处理类的静态成员变量。实际上,对于类的成员函数来讲,若是它不能访问类的任何非静态成员,则应该将该函数变成静态成员函数。.net
(2)对静态成员函数的调用,一般经过使用做用域解析运算符将函数名称链接到类名来完成。若是已经定义了类的对象,那么静态成员函数也能够经过使用点运算符将它们的名称链接到对象来调用。指针
(3)this 指针不能在静态成员函数中使用,由于静态成员函数不是经过它们所属类的任何实例调用的。并且,静态成员函数除非指定该成员属于哪一个实例,不然不能访问其类的实例成员。例如,来看如下类定义语句:code
class StatAccessorm
{对象
private:blog
int x;ip
public:
static void output()
{
cout << x; //对非静态成员的不正确访问
}
StatAccess(int x) { this->x = x; }
};
在语句 cout<<x
中试图访问 x 是不正确的,由于它等于隐式使用 this 指针,而这是静态函数 output 所不具备的。相反,在如下修改过的同一个类的示例中,静态成员函数 print 正确地访问了非静态成员 x,由于它使用了传递给它的类对象的名称做为形参来限定它。
class StatAccess
{
private:
int x;
public:
static void print(StatAccess a)
{
cout << a.x;
}
StatAccess(int x) { this->x = x; }
};
静态成员函数的一个优势是能够在任何类的实例被建立以前调用它们,这使得它们能够用来执行复杂的初始化任务,这些任务必须在建立类的对象以前完成。
C++ 使用关键字 Static 来描述静态类成员函数。要理解其中原委,能够看一看实例与静态类成员之间的区别。类的每一个对象都有它本身的实例成员的副本,可是全部的对象都共享相同的静态成员。
与此类似的是,每次调用函数都有其本身的非静态局部变量的副本,可是全部的函数调用都共享相同的静态局部变量。