首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

C++面试基础系列-static

  • 25-02-19 07:40
  • 3020
  • 8638
blog.csdn.net

系列文章目录

总目录链接


文章目录

  • 系列文章目录
    • 总目录链接
  • C++面试基础系列-static
    • 1.static含义
    • 2.普通静态变量
      • 2.1.静态全局变量
      • 2.2.静态局部变量
    • 3.类中静态变量
      • 3.1.静态成员变量
      • 3.2.静态常量成员
      • 3.3.静态成员函数
      • 3.4.静态类
      • 3.5.模板中的静态
      • 3.6.嵌套静态类
    • 关于作者


C++面试基础系列-static


1.static含义

static关键字

  • 静态变量和静态类
  • 类中的静态成员

在C++中,static 关键字有多个用途,包括定义静态变量、静态成员函数、静态数据成员、静态常量成员以及在函数中定义静态局部变量。以下是对 static 在C++中的详细描述:

2.普通静态变量

2.1.静态全局变量

当 static 用于全局变量时,它限制了变量的链接范围,使其只在定义它的文件内部可见,其他文件无法访问。

2.2.静态局部变量

在函数内部定义的 static 变量具有静态存储期。这意味着它们在程序的整个运行期间都存在,而不是仅在函数调用期间。每次函数调用时,static 局部变量都会保留上一次调用的值。

3.类中静态变量

3.1.静态成员变量

类的静态成员变量属于类本身,而不是类的任何特定对象。它们在所有对象之间共享。静态成员变量在所有实例之前或之后初始化,在程序的整个生命周期内保持其值。

3.2.静态常量成员

静态常量成员是类的一个特殊成员,它不仅具有静态存储期,还具有 const 特性。它们在定义时必须被初始化,并且不能被修改。

3.3.静态成员函数

静态成员函数属于类本身,而不是类的任何对象。它们可以访问类的静态成员,但不能访问非静态成员,因为它们没有 this 指针。静态成员函数可以在没有创建类的对象的情况下被调用。

3.4.静态类

从C++11开始,可以定义一个静态类,它只能包含静态成员,不能有构造函数、析构函数或基类。

3.5.模板中的静态

在类模板中,静态成员具有特殊的行为。每个实例化的模板类都有自己的静态成员,它们不是共享的。

3.6.嵌套静态类

在C++中,可以在类中定义静态类(也称为嵌套类),这些类在定义它们的类的外部是不可访问的。

  • 初始化:

静态数据成员通常在类的定义外部进行初始化,而不是在类内部。

  • 作用域:

静态成员的作用域是整个程序,它们可以在类的任何对象上通过类名直接访问。

  • 内存分配:

静态成员变量和静态局部变量存储在静态存储区,而不是堆栈或堆上。
以下是一些示例来说明 static 的使用:

// 静态全局变量
static int globalVar = 42; // 只在定义它的文件内可见

void function() {
    // 静态局部变量
    static int staticVar = 0; // 函数调用间保留值
    staticVar++;
}

class MyClass {
public:
    // 静态成员变量
    static int staticMember;

    // 静态常量成员
    static const int staticConstMember = 10;

    // 静态成员函数
    static void staticMemberFunction() {
        staticMember++; // 可以访问静态成员变量
    }
};

// 在类外初始化静态成员变量
int MyClass::staticMember = 0;

void functionWithStatic() {
    // 使用静态成员
    MyClass::staticMemberFunction();
    const int localStaticConst = 5; // 局部静态常量,作用域限制在函数内
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

关于作者

  • 微信公众号:WeSiGJ
  • GitHub:https://github.com/wesigj/cplusplusboys
  • CSDN:https://blog.csdn.net/wesigj
  • 微博:
  • -版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
WeSiGJ
微信公众号
共同分享,共同交流, 共同学习!
注:本文转载自blog.csdn.net的WeSiGJ的文章"https://blog.csdn.net/wesigj/article/details/141193815"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top