static关键字
这个C++面试经常问到,看了网络上很多回答,整理了一下,觉得这个是最清晰直观的解释
不考虑类的情况
1. 隐藏。所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用
2.默认初始化为0,包括未初始化的全局静态变量与局部静态变量,都存在全局未初始化区,普通局部变量存储在栈区
3.静态变量在函数内定义,始终存在,且只进行一次初始化,具有记忆性,其作用范围与局部变量相同,函数退出后仍然存在,但不能使用,除非下一次函数调用,下一次调用仍然能够得到上一次的值。
考虑类的情况
1.static成员变量:只与类关联,不与类的对象关联。定义时要分配空间,不能在类声明中初始化,必须在类定义体外部初始化,初始化时不需要标示为static;可以被非static成员函数任意访问。
2.static成员函数:由于只与类关联,不与类的对象关联,因此不具有this指针,无法访问类对象的非static成员变量和非static成员函数;不能被声明为const、虚函数和volatile(可以看一下三者实现细节和原理);可以被非static成员函数任意访问
参考资料:
https://interviewguide.cn/#/Doc/Knowledge/C++/%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95/%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95