C++ static
【面试题2-10】static 有什么作用
(1)在函数体内,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变
(2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问
(3)在模块内,一个被声明为静态的函数只可被这一模块内的其他函数调用。
【面试题2-11】static 变量与普通变量的区别
(1)static 全局变量与普通的全局变量
相同点:static全局变量和普通的全局变量都是静态存储方式。
不同点:非静态变量的作用域是整个源程序,当一个源程序有多个源文件组成时,非静态的全局变量在各个源文件都是有效的
静态变量的作用域是声明它所在的源文件,其他源文件不能使用它。
(2)static 局部变量只被初始化一次,下一次依据上一次结果值
(3)static 函数在内存中只有一份,普通函数在每个被调用中维持一份复制品。
static 函数作用域仅在本文件,只在当前源文件中使用的函数应该说明为内部函数(static), 他们应该在当前源文件总说明和定义。
对于可在当前源文件外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。
【面试题2-12】写出以下程序输出
1 #include <iostream> 2 using namespace std; 3 4 class widget{ 5 public: 6 widget() {count++;} 7 ~widget(){--count;} 8 static int num() {return count;} 9 private: 10 static int count; 11 }; 12 13 int widget::count= 0; 14 15 int main(){ 16 widget x,y; 17 cout<<"The num is "<<widget::num()<<endl; 18 if(widget::num()>1){ 19 widget x,y,z; 20 cout<<"The num is "<<widget::num()<<endl; 21 } 22 widget z; 23 cout<<"The num is "<<widget::num()<<endl; 24 return 0; 25 }
答案:
The num is 2 // 构造 x, y The num is 5 // 构造 if 中的 x,y,z The num is 3 // 析构 if 中的 x,y,z, 构造 z