天天看點

static的用法

static 的用法

static關鍵字是C, C++中都存在的關鍵字, 它主要有三種使用方式, 其中前兩種隻指在C語言中使用, 第三種在C++中使用(C,C++中具體細微操作不盡相同, 本文以C++為準).

(1)局部靜态變量  

(2)外部靜态變量/函數

(3)靜态資料成員/成員函數

下面就這三種使用方式及注意事項分别說明

(1)局部靜态變量

        定義在代碼塊中,隻做用于代碼塊内

#include<iostream>

using namespace std;

int global = 3;

static int s_external = 4;

void func(){

static int sta = 1; //這裡就是局部靜态變量 隻初始一次,

sta++;

cout << sta << endl;

}

int main(){

func();//這裡會輸出2

       func();//這裡會輸出3

system("pause");

return 0;

如此就可以看出靜态局部變量的作用了。

<b></b>

    這裡的靜态變量和函數,就不是用于區分存儲的可持續了,而是區分是否是内部連結的(通俗說就是外部不可用)

    用例子說明:

    在test1.cpp 

int global = 3; //靜态外部變量 能在外部檔案中使用

static int s_global = 4;//靜态内部變量隻能在本檔案中使用

extern void external_global(){  //靜态外部函數

cout &lt;&lt; "func_external_global" &lt;&lt; endl;

static void external_static(){ //靜态内部函數

cout &lt;&lt; "func_internal_static" &lt;&lt;endl;

在test2.cpp

extern int global ;//引用檔案外的外部連結的變量。

cout &lt;&lt; global &lt;&lt; endl;

//extern int s_global;

//cout &lt;&lt; s_global &lt;&lt; endl; 這些都是不允許的因為s_global 隻能在test1.cpp中使用

extern void external_global();

extern void external_static(); //引用這些外部的函數。這裡雖未報錯,但無法使用

external_global();

//external_static(); //因為是靜态的函數無法使用。

下面順便添加個與此無關的。

2.Menu.h内容如下:

      #ifndef  MENU_H

   #define MENU_H

  //int global=13

<b>   </b>static global =13<b></b>

   int add(int a,int b);

   int minus(int a, int b);

   #endif

3.add.cpp内容如下:

#include "Menu.h"

int add(int a, int b)

{

  return a+b;

4.minus.cpp内容如下:

int minus(int a,int b)

  return a-b;

4.main.cpp内容如下:

#include &lt;iostream.h&gt;

int main()

int a,b;

a=1;

b=2;

printf("%d",add(1,2));

printf("%d",minus(1,2));

return 0;

這種情況下代碼沒有問題。

但是一旦你紅色代碼部分,不注釋就不可以用了。你必須将add.cpp 和 minus.cpp的#include"Menu.h" 去掉,這樣才可以防止重複被定義。因為這些.cpp檔案會多次重新定義int global .會有多次include"Menu.h"

<b>當然你也可以把他定義為static </b>

<b>本文轉自 神迹難覓 51CTO部落格,原文連結:http://blog.51cto.com/ji123/1965840,如需轉載請自行聯系原作者</b>

繼續閱讀