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

  

posted on 2020-03-12 13:03  猪伯  阅读(232)  评论(0编辑  收藏  举报

导航