有关C++中static关键字的总结

static声明的变量全部都只存在于全局区,一个静态数据成员只能定义一次(因为在全局区)

int a = 6; int a = 7;√   

static int a = 6;static int a = 7;×

1.在文件范围内

        a.cpp中函数或全局变量用static关键字声明(静态全局变量)后,那么在b.cpp中将不可见。

2.在函数块内(静态局部变量)

        函数中定义了static变量,则此变量既有全局变量的属性也有局部变量的属性,其值存在于全局区,但是却只能在定义它的函数内使用。

3.在类内(假设A是类名)

        有些时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联,那么static关键字的作用就体现出来了。

            1)类内的成员变量和成员函数声明static后可以直接使用作用域运算符 类名::变量名/函数 (A :: a,    A :: func() )进行调用,不用static声明的话则不可以。

        2)其不再属于类的某个对象,所以不能用this指针。静态成员函数不能声明为const,并且不能再static函数体内使用this指针。

            3)static声明的变量由于在全局区,所以sizeof(A)不包含static声明的变量所占的空间大小。

            4)可以再类内声明加定义一个static属性的变量,也可以在类内用static声明,在类外再定义,但是在类外定义时不要再加static关键字。(可能是为了防止与全局区定义static变量相冲突)


猜你喜欢

转载自blog.csdn.net/yangbomoto/article/details/80577407
今日推荐