变量的声明和定义的区别
变量声明仅告知编译器名称与类型,不分配存储;定义则实际分配空间并建立实体。一个变量可多次声明(如通过 extern),但只能定义一次。需注意,若 extern 变量附带初始化,则该语句视为定义。
内存泄露的含义与预防
内存泄漏指动态申请内存后失去控制,导致无法释放。后果包括性能下降甚至服务宕机。避免方案首选 RAII(资源获取即初始化),利用对象生命周期自动管理。尽量用智能指针或 STL 容器替代裸指针,确保 new/delete 成对出现,并在 delete 后将指针置空。
排查内存泄漏的方法
首先观察监控,若运行中内存持续上涨且无法回落,可能存在泄漏。其次在测试环境稳定复现后,可使用 Valgrind 或 AddressSanitizer 等工具定位具体泄漏点,结合日志分析调用路径,针对性修复代码逻辑。
define 与 const 的区别
#define 是预处理宏替换,无类型检查,作用域不可控;const 是关键字,有类型安全,遵循作用域规则,且支持调试器查看值。
define 与 typedef 的区别
typedef 为类型起别名,参与编译过程,有类型检查;#define 仅是文本替换,易产生副作用。
宏函数与内联函数的区别
宏函数在预处理阶段展开,无类型检查,可能重复计算参数;内联函数在编译期处理,有类型检查,类似函数调用但减少开销。
类和结构体的区别
主要在于默认访问权限:类默认为 private,结构体默认为 public。功能上二者基本等价。
结构体和联合体的差别
结构体成员各自占用独立内存,联合体所有成员共享同一块内存,大小由最大成员决定。
静态库和动态库区别
静态库链接时拷贝到可执行文件,体积大但独立;动态库运行时加载,体积小但依赖系统环境。
C++ 的编译过程
分为预处理、编译、汇编、链接四个阶段,最终生成可执行文件。


