C/C++中的核心关键字:static extern const virtual volatile等
一、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]; };更多推荐
所有评论(0)