C++static关键字

it2025-02-19  5

static主要有三种用法

1、修饰全局变量(限定作用域)

限制作用域后不允许其他代码文件引用,可以解决重名的问题。

用static修饰全局变量/函数,则这个全局变量/函数成为静态全局变量/函数,静态全局变量/函数只在定义它的代码文件内可见,其他与之相链接的代码文件用extern也无法访问这个变量/函数。

2、修饰局部变量(保持变量内容持久化)

用static修饰局部变量,局部变量就变成了静态局部变量。静态局部变量的作用域仍然是局部的,但与普通局部变量不同的是,普通局部变量定义在栈中,而静态局部变量定义在数据段(存放全局变量和静态变量),因此离开作用域后,普通局部变量销毁,而静态局部变量仍然驻留内存,下次调用相同的函数时,这个静态局部变量仍保持着上次调用结束时的内容,直到程序结束才被销毁。

3、修饰类内的成员或者函数

普通成员从属于对象,静态成员从属于类。

修饰成员变量

用static修饰一个成员变量,这个成员变量就成为了静态成员变量。

静态成员变量从属于类,它必须在类内声明+必须初始化+必须在类外定义或者说初始化,不能用构造函数初始化,因为如果不创建对象,就不会调用构造函数,因此静态成员变量的初始化必须自己处理。

静态成员变量一旦被定义,就会一直存在于程序的整个生命周期中。静态成员变量在编译时就分配到一块内存,运行时即使新创建对象也不会为它分配新的内存。

静态成员变量可以用通过类名来访问,也可以通过对象名来访问。

修饰成员函数

用static修饰一个成员函数,这个成员函数就成为了静态成员函数。

静态成员函数不能调用普通成员变量或函数,只能调用静态成员变量或函数。(可以通过类名调用静态成员函数,因此如果不构建对象,就变成虚空调用了,导致出错)

最新回复(0)