C++ 中的static关键字

C++ 中的static关键字

static关键字是程序模块化不可或缺的一部分,有利于程序的扩展和维护

首先static是在C语言中就被声明了的一个修饰符

1.对于变量来说

局部变量

局部变量在没有进行初始化时的值是不确定的,除非对这个变量进行赋值

普通局部变量存储于进程的栈空间,使用完后会立即释放

如果普通局部变量用static修饰符修饰变成了静态局部变量时,即使没有对这个变量赋初值,,编译器也会把这个变量初始化为0

静态局部变量存储于进程的全局数据区,即使函数返回,他的值也不会变,即,倘若声明在函数中的静态局部变量的值在第一次调用该函数时改动了的话,这个改动是会保存下来的,在第二次函数调用时该静态局部变量的值是改变后的值

全局变量

全局变量是在静态存储区创建的,在程序的运行过程中一直存在

未经初始化的全局静态变量会被自动初始化为0

如果全局变量用了static修饰符修饰变成了全局静态变量的话,那么这个全局变量就只能在当前cpp文件中使用,而其他cpp文件有相同的命名变量的话也不会冲突,全局静态变量的作用域是定义之处开始,到文件结尾。

2.对于函数来说

在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;

warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰;

3.对于类来说

在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。对多个对象来说,静态数据成员只存储一处,供所有对象共用

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>);

原文地址:https://www.cnblogs.com/buerdepepeqi/p/12237122.html