static局部变量。在局部变量声明前加static表示这是一个“形似局部变量的静态变量”。看起来和用起来像是局部变量,但实际上他的性质跟其他的静态变量是一样的,也就是说在内存中只有一个副本,不会像局部变量那样函数调用完毕就释放。与其他静态变量不同的是他的可见性只保持在声明它的函数体内,但可以设置访问函数提供给外部使用。
static全局变量。这种用法继承自C语言,表示这个全局变量的可见性限制在声明它的源文件内(c或者cpp文件),因此不同的源文件可以使用static声明同名的全局变量而不会冲突。虽然同名,实际上在内存中是不同的全局变量。
static数据成员。表示这个成员只是逻辑上与声明它的类相关,但实际上它不属于任何一个类对象。在内存中以单例形式存在,不会随着类对象的创建和销毁而存亡。
static成员函数。实际上相当于C语言的全局函数,它没有this指针,仅在逻辑上与类相关联,在调用上线文中与任何类对象都没有关联,可以当成全局函数来使用。
答案是不可以。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。
我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。
静态成员函数是类的成员函数,该函数不属于该类申请的任何一个对象,而是所有该类成员共同共有的一个函数。
静态的成员变量用static修饰
举个例子给你,你们班里面有10个人(10个比如高一一班的对象),体育老师分给你们一个篮球(静态成员函数),你们每个人都带了一个篮球(非静态成员函数),你们都很小气,自己的球只能自己拍,要是5对5打比赛,那就只能用那个静态的篮球了(每个人都可以拿来用,但是带来的影响是对全体的)。因此,我可以说那个篮球是高一一班的成员。所以也就是说:静态成员函数是类的成员函数(因为高一二班就不能拿来玩),但是这个篮球最后还是要还给老师的,任何私人不得占有。希望这样你能明白,其实在机器结构里面说白了静态的成员的内存是唯一的一份,就是当你在类外声明他时开辟的,但是非静态函数的空间分配是在你实例化对象时创建的。
再给你一个链接:http://hibaiducom/444789192/blog/item/486cebc63fe2dbd5d00060e9html
类的静态成员函数不与任何对象相联系,它可以直接访问类的静态数据成员,而不能直接访问类的普通数据成员(即非静态数据成员),因为普通数据成员只有类的对象存在时才有意义。
C中的静态函数只在本文件中有效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)