首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ static 關鍵字全面解析

     編輯:關於C++

概述

static 是 C++ 中用於控制變量/函數存儲方式和可見性的修飾符。其含義因上下文(面向過程 vs 面向對象、全局 vs 局部)而異。

一、面向過程編程中的 static

1. 靜態全局變量

在全局變量前加 static,使其成為文件級作用域:僅在定義該變量的源文件中可見,其他文件即使用 extern 也無法訪問。未顯式初始化時自動初始化為 0。適合模塊內部狀態封裝。

2. 靜態局部變量

在函數內部定義 static 變量,其存儲在全局數據區而非棧上。生命周期贯穿整個程序運行,但作用域僅限於該函數。值在函數調用之間保持。解決了「函數調用間保持狀態」且不污染全局命名空間的需求。

3. 靜態函數

在函數聲明前加 static,限制該函數僅在本文件可見。不同文件可定義同名靜態函數不衝突。實現文件級封裝。

二、面向對象編程中的 static

1. 靜態數據成員

  • 屬於類而非對象,所有對象共享唯一拷貝。
  • 必須在類外定義並初始化(如 int MyClass::sum = 0;)。
  • 遵循 public/protected/private 訪問控制。
  • 訪問方式:對象.靜態成員 或 類名::靜態成員。

2. 靜態成員函數

  • 無 this 指針,只能直接訪問靜態成員;訪問非靜態成員需通過對象參數。
  • 可在類內定義或類外實現(類外不加 static)。
  • 調用方式同靜態數據成員。

代碼示例

// 靜態局部變量
void counter() {
    static int cnt = 0;
    cout << ++cnt << endl;
}

// 類靜態成員
class MyClass {
public:
    MyClass(int v) : val(v) { ++total; }
    static int getTotal() { return total; }
private:
    int val;
    static int total; // 聲明
};
int MyClass::total = 0; // 定義並初始化

總結

理解 static 的關鍵在於區分「存儲期」(靜態存儲 vs 自動存儲)與「作用域/鏈接性」(文件級 vs 類級 vs 塊級)。善用 static 可實現封裝、狀態保持和命名空間隔離。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved