c++中静态函数与动态函数的区别
在C语⾔中,由于没有类的概念,所以没有静态成员⼀说,在c中static的作⽤主要有2个:
⼀是隐藏功能,对于static修饰的函数和全局变量⽽⾔
⼆是保持持久性功能,对于static修饰的局部变量⽽⾔。
并且,因为存放在静态区,全局和局部的static修饰的变量,都默认初始化为0。
C语⾔中使⽤静态函数的好处:
静态函数会被⾃动分配在⼀个⼀直使⽤的存储区,直到退出应⽤程序实例,避免了调⽤函数时压栈出栈,速度快很多。
关键字“static”,译成中⽂就是“静态的”,所以内部函数⼜称静态函数。但此处“static”的含义不是指存储⽅式,⽽是指对函数的作⽤域仅局限于本⽂件。 使⽤内部函数的好处是:不同的⼈编写不同的函数时,不⽤担⼼⾃⼰定义的函数,是否会与其它⽂件中的函数同名,因为同名也没有关系。
c语⾔中static的语义1.static变量:1).局部a.静态局部变量在函数内定义,⽣存期为整个源程序,但作⽤域与
⾃动变量相同,只能在定义该变量的函数内使⽤。退出该函数后, 尽管该变量还继续存在,但不能使⽤它。b.对基本类型的静态局部变量若在说明时未赋以初值,则系统⾃动赋予0值。⽽对⾃动变量不赋初值,则其值是不定的。2).全局全局变量本⾝就是静态存储⽅式, 静态全局变量当然也是静态存储⽅式。但是他们的作⽤域,⾮静态全局 变量的作⽤域是整个源程序(多个源⽂件可以共同使⽤); ⽽静态全局变量则限制了其作⽤域, 即只在定义该变量的源⽂件内有效, 在同⼀源程序的其它源⽂件中不能使⽤它。2.static函数(也叫内部函数)只能被本⽂件中的函数调⽤,⽽不能被同⼀程序其它⽂件中的函数调⽤。区别于⼀般的⾮静态函数(外部函数) static在c⾥⾯可以⽤来修饰变量,也可以⽤来修饰函数。 先看⽤来修饰变量的时候。变量在c⾥⾯可分为存在全局数据区、栈和堆⾥。其实我们平时所说的堆栈是栈⽽不包含对,不要弄混。
在c++中,由于⾯向对象的思维,它与C语⾔中的作⽤有⼀些不同,有了类中静态成员的说法。静态成员不属于对象,⽽属于类。不创建对象也可调⽤。从代码形式上来说没有任何区别。普通类成员函数与静态成员函数的区别在于普通成员函数有⼀个隐藏的调⽤参数(this)指针。所以就是说静态成员函数没有对象也可调⽤。但他们都是在编译期就进⾏地址绑定的。虚拟成员函数与他们的区别在于虚拟函数是对象⽣成时有对象的虚表决定的(所以是动态的)。
对类的静态和⾮静态函数的不同的调⽤要求决定了它们在使⽤上的⽅便程度:⾮静态成员函数要通过对象调⽤,所以要求⾸先建⽴⼀个对象;⽽静态成员函数可不建⽴对象就可以被使⽤。因此,与类的
⾮静态数据成员⽆关的成员函数,虽然可以被定义为⾮静态函数,但是如果定义为静态函数的话在使⽤上会更加⽅便。
另外,如果类的成员函数想作为回调函数来使⽤,⼀般情况下只能将它定义为静态成员才⾏。
C++类中的静态成员有⼀个⾮常好的功能,那就是⽆论类定义了多少个对象,这些对象始终都共同使⽤这⼀个静态成员
例如: class A{
static修饰的变量static int num;
A(){num++} }
int A::num=0;
就会有如下效果: A a,b,c,d; cout<
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论