1. 程式人生 > >c/c++中static用法總結

c/c++中static用法總結

static的作用主要有兩種:

第一個作用是限定作用域;第二個作用是保持變數內容持久化;

c語言中static的用法:

1、全域性靜態變數:

  用法:在全域性變數前加上關鍵字static,全域性變數就定義成一個全域性靜態變數。 static int temp;

  記憶體中的位置:靜態儲存區,在整個程式執行期間一直存在。

  初始化:未經初始化的全域性靜態變數會被自動初始化為0(自動物件的值是任意的,除非他被顯式初始化);

  作用域:全域性靜態變數在宣告他的檔案之外是不可見的,準確地說是從定義之處開始,到檔案結尾。

2、區域性靜態變數:

  在區域性變數之前加上關鍵字static,區域性變數就成為一個區域性靜態變數。

  記憶體中的位置:靜態儲存區

  初始化:未經初始化的全域性靜態變數會被自動初始化為0(自動物件的值是任意的,除非他被顯式初始化);

  作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束的時候,作用域結束。但是當局部靜態變數離開作用域後,並沒有銷燬,而是仍然駐留在記憶體當中,只不過我們不能再對它進行訪問,直到該函式再次被呼叫,並且值不變;

3、靜態函式:

  在函式返回型別前加關鍵字static,函式就定義成靜態函式。函式的定義和生命在預設情況下都是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用;

c++中static的用法:

  1、類的靜態成員:

  class A{

  private:

    static int val;

  };

  在cpp中必須對他進行初始化,初始化時使用作用域運算子來標明他所屬類,其屬於該類的所有成員共有,只有一個拷貝;

  2、類的靜態成員函式:

  class A{

  private:

    static int func(int x);

  };

   實現的時候也不需要static的修飾,因為static是宣告性關鍵字;類的靜態函式是該類的範疇內的全域性函式,不能訪問類的私有成員,只能訪問類的靜態成員,不需要類的例項即可呼叫;實際上,他就是增加了類的訪問許可權的全域性函式

  void  A::func(int);

  靜態成員函式可以繼承和覆蓋,但無法是虛擬函式;

  3、只在cpp內有效的全域性變數:

  在cpp檔案的全域性範圍內宣告:

  static int val = 0;

  這個變數的含義是該cpp內有效,但是其他的cpp檔案不能訪問這個變數;如果有兩個cpp檔案聲明瞭同名的全域性靜態變數,那麼他們實際上是獨立的兩個變數;

  4、只在cpp內有效的全域性函式:

  函式的實現使用static修飾,那麼這個函式只可在本cpp內使用,不會同其他cpp中的同名函式引起衝突;

  warning:不要再標頭檔案中宣告static的全域性函式,不要在cpp內宣告非static的全域性函式,如果你要在多個cpp中複用該函式,就把它的宣告提到標頭檔案裡去,否則cpp內部宣告需加上static修飾;

相關推薦

【轉】C++static用法總結

地址:https://www.cnblogs.com/qiaoconglovelife/p/5323086.html 1.用於區域性變數 C++中區域性變數有三種: (1)auto:此關鍵詞常常省略。auto type a 常常簡寫為type a。 如:int a=auto int

c/c++static用法總結

static的作用主要有兩種: 第一個作用是限定作用域;第二個作用是保持變數內容持久化; c語言中static的用法: 1、全域性靜態變數:   用法:在全域性變數前加上關鍵字static,全域性變數就定義成一個全域性靜態變數。 static int temp;   記憶體中的位置:靜態儲存區,在整個程式執行

c/c++const用法總結

沒有 pan 分配 值類型 變量初始化 _id 多少 部分 參數 1、修飾常量時:   const int temp1; //temp1為常量,不可變   int const temp2; //temp2為常量,不可變 2、修飾指針時:   主要看const在*的前後,

C/C++:static用法總結

.sh pre 值類型 定義和使用 靜態 public out pan -1 前言:static是C/C++中一個很重要的關鍵字,最近閱讀了很多博客和資料,遂在此對自己的學習筆記進行簡單的總結並發表在這裏 一、C語言中的static ? 靜態全局變量:在全局變量之前加

C++STL用法總結【轉】

(轉自:https://blog.csdn.net/piaoxuezhong/article/details/54348787?utm_source=blogxgwz8) 1.1 什麼是STL? STL(Standard Template Library),即標準模板庫,是一個具有工業強度的

C++CONST用法總結

1、修飾常量時: ? 1 2 const int temp1; //temp1為常量,不可變 int const temp2; //temp2為常量,不可變 2、修飾指標時:   主要看const在*的前後,

C語音,static 關鍵字的用法.兩個疑問

static修飾全域性變數只能在本檔案中使用。如果一個全域性變數,它既可以在本原始檔中被訪問到,也可以在同一個工程的其它原始檔中被訪問就需要用到extern. // ------ file: m.c #include <iostream> extern void

C++STL用法總結

函式庫對資料型別的選擇對其可重用性起著至關重要的作用。舉例來說,一個求方根的函式,在使用浮點數作為其引數型別的情況下的可重用性肯定比使用整型作為它的引數類性要高。而C++通過模板的機制允許推遲對某些型別的選擇,直到真正想使用模板或者說對模板進行特化的時候,STL就利用了這一點提供了相當多的有用演算法。它是在一

C++static 用法總結

1、類的靜態成員class A{public:static int key;};類的靜態成員是該類所有例項公用的成員,也就是說在該類內是全域性變數。類的靜態成員必須初始化,類中只是宣告,在cpp中才是初始化。static修飾的變數先於物件存在。注意:static類物件必須要在

C++static關鍵字總結(轉)

C++的static有兩種用法:面向過程程式設計中的static和麵向物件程式設計中的static。前者應用於普通變數和函式,不涉及類;後者主要說明static在類中的作用。 1.面向過程設計中的static 1.1靜態全域性變數 在全域性變數前,加上關鍵字static,

c++__declspec用法總結

“__declspec”是Microsoft c++中專用的關鍵字,它配合著一些屬性可以對標準C++進行擴充。這些屬性有:align、allocate、deprecated、 dllexport、dllimport、 naked、noinline、noreturn、nothr

C++ const 和static總結以及使用

局部變量 數值 功能 const 常量 指針 main this指針 同名 this 一 static的使用 (作用域和存儲方式) 1.作用域---------->隱藏 靜態函數跟靜態全局變量的作用類似 (靜態函數不能被其它文件所用; 其它文件中可以定義相同名字的函

C++學習筆記】C++巨集的定義用法總結

本文轉載自:https://www.cnblogs.com/jjzzx/p/5122494.html 第一種用法——配合條件編譯:#define DEBUG 定義一個叫DEBUG的識別符號。它應該與#ifdef或#ifndef配合使用。舉例如下: #define DEBUG #

C++STLsort用法介紹

自定義STL中sort的排序規則 前情提要: 0、要使用sort,首先需要包含標頭檔案< algorithm> 1、sort函式可以指定兩個引數,也可以指定三個引數。 (1)第一個是要排序

C# numericUpDown控制元件用法總結及注意事項

numericUpDown控制元件在使用的過程當中,有些用法會不太一樣,下面做一總結。 1. 判斷numericUpDown的value屬性是否為空        使用過Numericupdown控制元件的童鞋初期應該都會碰到一個奇怪的問題,在刪除了控制元件裡的值之後,裡

C語言%的用法

C語言中x=a%10;和a%10==0;表示什麼意思?(1)x=a%10; 把a對10求餘賦值給x,其實就是得到a的個位賦值給x。(2)a%10==0;是判斷一個數的末尾是否是0,%是求a的餘數,a除1

C++程式設計時間使用總結

各種時間類/資料結構 與時間相關的類和資料結構有:  1. CTime 2. CTimeSpan 3. __time64_t和time_t 4. struct tm 5. SYSTEMTIME 6. FILETIME 7. DBTIMESTAMP 一. CTime // 微

C語言資料型別總結

1.c語言的資料型別的分類: 分為四大類:基本資料型別、指標型別、空型別、構造型別。 基本資料型別:整型(int)、單精度浮點型(float)、雙精度浮點型(double)、字元型(char); 注:

C語言sscanf函式用法總結(一) 正則表示式

#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> using namespace std; void sscanf_te

c/c++筆試程式設計題總結

1.請實現字串右迴圈移位函式,比如:“abcdefghi”迴圈右移2位就是“hiabcdefg”. 函式原型:void RightLoopMove(char *pStr, unsigned short steps) 函式引數說明: pStr: Point to a ‘\0’