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中文網其他相關文章!