首页 > 试题广场 >

说一下static关键字的作用

[问答题]

在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员,这样就出现以下作用:

(1)类的静态成员函数属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。      

(2)不能将静态成员函数定义为虚函数。      

(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊 ,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。

(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就 产生了一个意想不到的好处:成为一个callback函数,使得我们得以将C++和C-based X W indow系统结合,同时也成功的应用于线程函数身上。 (这条没遇见过)  

(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问 时间,节省了子类的内存空间。      

(6)静态数据成员在<定义或说明>时前面加关键字static。      

(7)静态数据成员是静态存储的,所以必须对它进行初始化 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)     

(8)静态成员初始化与一般数据成员初始化不同:

初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
初始化时不加该成员的访问权限控制符private,public等;        
初始化时使用作用域运算符来标明它所属类;
           所以我们得出静态数据成员初始化的格式:
<数据类型><类名>::<静态数据成员名>=<值>

(9)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志

发表于 2019-04-13 22:39:32 回复(0)
<p>静态变量</p>
发表于 2020-06-03 22:24:58 回复(0)
竟问一些细枝末节的问题 到上手操作 全她妈玩完
发表于 2019-10-13 16:01:59 回复(0)
C语言中,用在全局变量或者函数,表示该变量或函数的作用域限于本文件,我猜可以提高链接的速度。此外,降低无用的外链总是好的。
用于局部变量相当于局限于定义作用域的全局变量(作用域小于生存域)

C++中继承了C中的用法。用于类成员时,相当于该成员属于类,而不是对象,因而就像是命名空间内的普通函数和变量。
(个人理解)
发表于 2021-02-27 20:39:23 回复(0)
1.全局静态变量,在静态存储区,在程序运行期间一直存在,自动初始化为0,在声明他的文件之外是不可见的。 2.局部静态变量,函数内声明了静态变量,函数结束时,静态变量的数据不会被清除。 3.静态函数,只能在声明的cpp文件内使用。 4.类的静态成员。5.类的静态函数,他仅能访问类的静态成员和静态函数,不能将静态成员函数定为虚函数。 需程序员手动指定初始化,否则编译不会报错,link会报错。
编辑于 2020-09-01 09:01:13 回复(0)
#include <iostream> </iostream>
发表于 2020-06-02 16:04:27 回复(0)
<p>限制变量的作用域,规定产量的储存域</p><p><br></p><p><br></p>
发表于 2020-04-29 10:23:39 回复(0)