c++++ 中 static 关键字应用于函数可实现以下场景:定义私有或受保护的类方法,以实现类内或派生类访问;创建全局函数,使函数可以在程序任意位置访问;创建线程安全的函数,确保并发环境中的安全使用。

C++ 函数 static 关键字的应用场景
static 关键字在 C++ 中广泛用于函数声明中,它控制函数作用域和生存期。下面列出一些主要的应用场景:
1. 定义私有或受保护的类方法
立即学习“C++免费学习笔记(深入)”;
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关键字的应用场景有哪些?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1446838.html
微信扫一扫
支付宝扫一扫