卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 基础与语法

    • 介绍c++一下三大特性
    • 指针和引用的区别
    • 结构体和类的区别
    • 结构体与联合体的区别
    • static关键字和const关键字的作用
      • 简要回答
      • 详细解答
      • 代码示例
      • 知识图解拓展
    • extern C的作用
    • volatile关键字的作用
    • inline函数与宏的区别与优劣
    • auto和decltype的区别
    • sizeof和strlen的区别
    • 浮点数比较方法
    • 静态局部变量,全局变量,局部变量的特点,以及使用场景
    • C++中四种类型转换
  • 面向对象

  • STL 与容器

  • 内存管理

  • C++11 与现代 C++

  • 智能指针

  • 并发与 I/O

# static关键字和const关键字的作用

# 简要回答

  • static

声明静态变量,静态变量的生命周期直到程序结束。

当在函数内部声明静态变量时,即使函数执行完了也不会释放它,下次调用该函数时会保留上次的状态。

所有静态成员变量共享一个内存空间,即无论实例化多少个对象,其中的静态成员都是共享的,静态成员函数只能访问静态成员变量。

  • const

声明变量为常量,使得变量不能被修改,避免误操作。

加在指针前面,const int* p可以使得指针指向的元素不变,int* const p可以使得指针指向的位置不变。

加在函数后面void func() const可以使得函数不会修改任何变量。

# 详细解答

  1. static的作用: 用于控制变量和函数的生命周期、作用域和访问权限。
  • 1)静态局部变量:在函数体内部使用static关键字修饰的变量 特点:其生命周期与程序的生命周期相同,但只能在定义它的函数内部进行访问。
  • 2)静态成员变量:在类中使用static关键字修饰的成员变量 特点:所有对象共享同一份数据;在编译阶段分配内存(程序还没运行前,内存分配在全局区),类内声明,类外初始化。
  • 3)静态成员函数:在类内使用static关键字修饰的成员函数 特点:所有对象共享同一个函数;静态成员函数只能访问静态成员变量;静态成员函数调用可以不需要通过创建类的实例,而是直接通过类名调用。
  1. const的作用:用于指定变量、指针、引用、成员函数等的性质。
  • 1)常量变量:声明变量,使变量的值不能修改(只读);

  • 2)指针和引用:声明指向常量的指针(指针常量),表示指针的指向的值是常量,不能通过指针修改,但是指针的值(内存地址)可以修改;

    声明常量引用,表示引用的值是常量,不能通过引用修改;

  • 3)成员函数:声明常量成员函数,表示该函数不会修改对象的成员变量;

  • 4)常量对象:声明对象为常量,使对象的成员变量不能被修改;

  • 5)常指针参数:声明函数参数为指向常量的指针(指针常量),表示函数不会通过该指针修改传入的数据;

  • 6)常引用参数:声明函数参数为常量引用,表示函数不会修改传入的数据。

# 代码示例

  1. static
  • 静态局部变量
#include <iostream>
void counter() {
    static int count = 0;  // 初始化仅一次
    count++;
    std::cout << "Count: " << count << std::endl;
}
int main() {
    for (int i = 0; i < 3; i++) counter();  // 输出:1, 2, 3
    return 0;
}
1
2
3
4
5
6
7
8
9
10
  • 静态成员变量(类共享数据)
class Car {
public:
    static int totalCars;  // 声明
    Car() { totalCars++; }
};
int Car::totalCars = 0;  // 类外初始化

int main() {
    Car a, b;
    std::cout << "Total cars: " << Car::totalCars;  // 输出:2
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
  • 静态成员函数
class MathUtils {
public:
    static double square(double x) { return x * x; }  // 不依赖对象
};
int main() {
    std::cout << MathUtils::square(5);  // 直接通过类调用
    return 0;
}
1
2
3
4
5
6
7
8
  1. const
  • 常量变量
const int MAX_SIZE = 100;  // 必须初始化
// MAX_SIZE = 200;  // 编译错误
1
2
  • 常量成员函数(对象状态保护)
class Student {
    int score;
public:
    int getScore() const { return score; }  // 承诺不修改成员
};
1
2
3
4
5
  • 常量指针与指针常量
int a = 10;
int b = 20;
const int* p1 = &a;  // 指向的内容不可改(*p1 只读),指针可变
int* const p2 = &a;  // 指针不可改,指向的内容可变
const int* const p3 = &a;  // 指针和内容都不可变
1
2
3
4
5
  • 口诀 看 const 位置,谁在 * 的左边谁只读,谁在右边谁固定

# 知识图解拓展

  • const关键字和static关键字的示意图 image image

​ image

Last Updated: 3/10/2026, 6:08:48 PM

← 结构体与联合体的区别 extern C的作用 →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪