首頁  >  文章  >  後端開發  >  C++ 函式static關鍵字的應用程式場景有哪些?

C++ 函式static關鍵字的應用程式場景有哪些?

王林
王林原創
2024-04-11 21:51:02749瀏覽

C 中static 關鍵字應用於函數可實現以下場景:定義私有或受保護的類別方法,以實現類別內或衍生類別存取;建立全域函數,使函數可以在程式任意位置存取;建立執行緒安全的函數,確保並發環境中的安全使用。

C++ 函数static关键字的应用场景有哪些?

C 函數static 關鍵字的應用場景

static 關鍵字在C 中廣泛用於函數宣告中,它控制函數作用域和生存期。以下列出一些主要的應用場景:

1. 定義私有或受保護的類別方法

static 函數可以被宣告為私有或受保護的,這意味著它們只能在該類別內部存取或衍生類別中存取。這對於建立僅用於內部管理的實用程式函數很有用。

2. 建立全域函數

static 函數可以以全域作用域定義,這表示它們可以在程式的任何地方存取。這對於創建庫函數或實用程式函數非常有用。

3. 建立執行緒安全的函數

static 函數是執行緒安全的,這表示它們可以在並發環境中安全使用。這是因為它們只存在單一副本,不會因並發存取而修改。

實戰案例:

私人靜態函數:

class MyClass {
public:
    void foo() {
        static int count = 0;  // 私有静态变量
        count++;
        std::cout << "Call count: " << count << std::endl;
    }
};

int main() {
    MyClass obj;
    obj.foo();  // 输出:Call count: 1
    obj.foo();  // 输出:Call count: 2
    // count 变量只在 foo() 方法中可见,不能从主函数中访问。
}

受保護的靜態函數:

class Base {
protected:
    static int value;  // 受保护静态变量
};

class Derived : public Base {
public:
    static void set_value(int v) {
        Base::value = v;  // 可以访问基类的受保护静态成员
    }

    static int get_value() {
        return Base::value;  // 可以访问基类的受保护静态成员
    }
};

int main() {
    Derived::set_value(100);
    std::cout << "Value: " << Derived::get_value() << std::endl;  // 输出:Value: 100
    // 只能通过 Derived 类访问 value 变量,因为它继承了 Base 类。
}

全域靜態函數:

static int global_count = 0;  // 全局静态变量

int increment_count() {
    return ++global_count;  // 返回并递增全局计数器
}

int main() {
    std::cout << increment_count() << std::endl;  // 输出:1
    std::cout << increment_count() << std::endl;  // 输出:2
    // 全局计数器在程序的整个生命周期中都可以访问。
}

#執行緒安全的靜態函數:

class ThreadSafeClass {
public:
    static int get_random_number() {
        static std::random_device rd;  // 静态随机数生成器
        static std::mt19937 gen(rd());
        return gen();
    }
};

int main() {
    std::thread t1([] {
        for (int i = 0; i < 10000; i++) {
            ThreadSafeClass::get_random_number();
        }
    });

    std::thread t2([] {
        for (int i = 0; i < 10000; i++) {
            ThreadSafeClass::get_random_number();
        }
    });

    t1.join();
    t2.join();
    // 即使从多个线程并发访问,get_random_number 函数也能生成线程安全的随机数。
}

以上是C++ 函式static關鍵字的應用程式場景有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn