一、C语言核心高频关键字(C和C++通用)

1. static

修饰局部变量:延长生命周期,从函数栈帧存活变为程序全局存活,但作用域仍限于函数内,仅初始化一次。

void func() { static int a = 0; a++; } //每次调用a自增,不会重置。

修饰全局变量/函数:限制作用域为当前文件(避免跨文件命名冲突,相当于“文件内私有”)。

C++额外用法:修饰类的静态成员(属于类而非对象,所有对象共享;静态成员函数无this指针,不能访问非静态成员)。

2. const(C与C++差异)

C中const是“只读变量”(仍占内存,可通过指针间接修改),如 const int a = 10; int* p = &a; *p = 20;(C中编译通过,C++中编译报错)。

C++中const是“真正的常量”,支持“常量折叠”(编译时计算常量表达式)。

修饰指针的4种情况

const int* p;    // 指针指向的内容不可改(*p不可改,p可改)
int const* p;    // 同上(const与int位置不影响)
int* const p;    // 指针本身不可改(p不可改,*p可改)
const int* const p;  // 指针和指向的内容都不可改

const#define的区别
const有类型检查,#define仅文本替换;const在编译期处理,#define在预处理期。

3. volatile(嵌入式/底层开发)

本质:变量的值可能被当前代码之外的 “意外因素” 修改(比如硬件、其他线程),所以每次用这个变量时,都必须从内存读最新值,不能用编译器缓存的旧值。
例:volatile int* reg = 0x12345678;(硬件寄存器地址,每次读都可能变化,必须从内存重读)。

4. sizeof(与strlen对比)

核心考点:计算对象/类型的字节大小(编译期确定)

区别于strlen(库函数,运行时计算字符串长度,以\0结尾)。

char arr[] = "abc";
sizeof(arr);  // 4(包含'\0')
strlen(arr);  // 3(不包含'\0')

sizeof对指针计算的是指针本身的大小(如32位系统4字节,64位8字节),与指向的内容无关。

5. extern(跨文件调用及C++兼容C)

核心考点:声明外部符号及extern "C"的作用

基本用法:声明在其他文件定义的变量/函数,如 extern int g_val;(告知编译器“g_val在别处定义”)。

C++中extern "C":强制编译器按C语言规则编译代码(避免C++的函数名 mangling 命名修饰),用于C++调用C库:

extern "C" {
    #include "c_lib.h"  // C库头文件
}

二、C++特有的高频关键字

1. virtual(多态核心)

虚函数:基类中用virtual声明的函数,子类可重写,通过基类指针/引用调用时,会动态绑定到子类实现(多态)。

纯虚函数:virtual void func() = 0; 无实现,包含纯虚函数的类为“抽象类”,不能实例化,只能作为基类。

析构函数声明为虚函数为了防止基类指针删除子类对象时,只调用基类析构,导致子类资源泄漏。

2. new/delete(与malloc/free对比)

new/delete是C++关键字,malloc/free是C库函数。

new会调用构造函数,delete会调用析构函数;malloc/free仅分配/释放内存,不处理对象生命周期。

new返回对应类型指针,malloc返回void*,需强制转换。

3. this(类成员函数的隐含指针)

指向当前对象的指针,在非静态成员函数中隐含存在,无需显式声明。

用途:区分成员变量和参数。返回当前对象(return *this;)。

静态成员函数中无this指针,因为不依赖具体对象。

4. template(泛型编程)

实现“类型无关”的通用代码。

template <typename T>  // 函数模板
T max(T a, T b) { return a > b ? a : b; }

template <class T>  // 类模板(typename与class可互换)
class Stack { T data[100]; };

更多推荐