namespace 极简总结命名空间作用划分独立作用域解决同名变量 / 函数冲突模块化管理代码用::访问空间内成员。两种 using 用法using 命名空间::名字using 声明仅引入单个符号冲突少工程推荐using namespace 命名空间using 指令引入全部符号简写方便但易重名仅小型程序用。嵌套命名空间空间内再套空间层级管理C17 可简写A::B多层::访问。匿名命名空间无名称内部内容仅当前文件可见替代 static 做文件私有函数 / 变量。命名空间别名namespace 别名 原空间简化超长嵌套命名空间书写。2. 定义命名空间语法cpp运行namespace 空间名 { // 变量、函数、类、结构体 int a 10; void func() {} }二、访问命名空间元素using 声明 /using 指令1. 限定符直接访问基础写法不使用任何 using每次写全空间名cpp运行std::cout LibA::a endl; LibA::func();2. using 声明using 标识符语法using 空间::名字;作用只引入单个指定符号仅该名字可直接使用其他符号仍需加空间前缀。cpp运行#include iostream using std::cout; // 只引入std里的cout int main() { cout 直接用cout endl; // cin 未声明必须写 std::cin std::cin x; return 0; }3. using 指令using namespace 空间语法using namespace 空间名;作用一次性引入整个空间所有符号空间内所有名称都可无前缀使用。cpp运行#include iostream using namespace std; // 导入std全部内容 int main() { cout hello; cin x; endl; return 0; }三、嵌套命名空间1. 概念命名空间内部再定义 namespace形成层级结构适合多层级代码分组如项目→模块→工具。2. 定义方式老式写法C17 前cpp运行namespace Project { namespace Net { void send() { cout 网络发送 endl; } } }C17 简化语法推荐cpp运行namespace Project::Net { void send() {} }3. 使用嵌套命名空间多层::逐层访问cpp运行// 完整写法 Project::Net::send(); // 搭配using简化 using namespace Project::Net; send();四、匿名命名空间 命名空间别名1. 匿名命名空间无名字 namespace定义cpp运行namespace { int temp 100; void helper() {} }核心特性 作用作用域仅限当前文件等价于加static其他 cpp 文件无法访问里面的内容替代全局 static 变量 / 函数C 推荐优先用匿名空间使用场景只在当前源文件内部使用的工具函数、临时变量防止跨文件命名冲突。使用匿名空间内的符号直接使用无需前缀cpp运行helper(); cout temp;2. 命名空间别名给长空间简写语法namespace 别名 原空间名;解决多层嵌套、超长命名空间书写繁琐问题。cpp运行// 超长嵌套空间 namespace Game::Logic::Battle::Skill { void fire() {} } // 设置别名 namespace Skill Game::Logic::Battle::Skill; // 使用别名调用 Skill::fire();也可给普通空间起别名cpp运行namespace A LibA; A::print();二、nullptrC11 空指针nullptr关键字类型std::nullptr_t专门代表空指针对比 NULL / 0NULL 是宏#define NULL 0本质整型0 是字面量 int重载场景下 NULL/0 会匹配 int 版本产生歧义nullptr 只会匹配指针转换规则nullptr 可隐式转为任意指针类型普通指针不能隐式转 nullptr_t规范C11 后统一用 nullptr不用 NULL、0 表示空指针class struct 完整知识点梳理一、基础核心区别本质相同class、struct都属于自定义复合类型都能写成员变量、成员函数、构造、析构、重载、继承、多态等语法几乎互通。两大默认差异考点核心1默认成员访问权限struct所有成员默认 publicclass所有成员默认 private示例cpp运行struct S { int a; // public }; class C { int a; // private };2默认继承方式cpp运行// struct 默认 public 继承 struct Son : Base {}; // class 默认 private 继承 class Son : Base {};二、三种访问权限 public /protected/privatepublic 公有外部任意代码、子类、自身都能直接访问。protected 保护仅自身 派生类可以访问外部不能访问。private 私有只有类内部自身能访问子类、外部均不可访问。手动修改权限用访问控制块分段声明cpp运行class Test { private: int x; protected: int y; public: void func(){} };四、函数重载静态多态定义同一作用域同名函数参数列表不同个数 / 类型 / 顺序不能作为重载区分仅返回值不同、仅参数名不同重载解析编译器自动匹配实参优先级精确匹配 提升转换 普通转换多重等价匹配会报歧义重载 vs 函数模板重载手动写每个版本逻辑可不同类型固定有限模板一套代码自动生成多类型逻辑统一扩展性强五、inline 内联函数inline 只是给编译器的优化建议非强制命令作用调用处展开函数体消除函数调用压栈跳转开销使用规范短小函数1~5 行、无循环 / 递归放头文件加 inline解决多文件 include 重复定义报错复杂函数循环、递归、代码量大放 cpp不用 inline编译器会直接忽略 inline验证方式编译加 - O2 优化查看汇编无 call 指令代表成功内联类内直接定义的成员函数默认隐式 inline六、const 全场景1. const 普通变量初始化后不可修改定义时必须赋值有类型、作用域优于 #define 宏2. const 指针必考区分const int* p指向常量指针内容不可改指针可换指向int* const p指针常量指针地址固定内容可修改const int* const p双重 const内容、指针均不可改3. const 修饰函数参数const T只读引用函数内禁止修改外部数据避免拷贝提升安全4. const 修饰返回值返回const T* / const T外部无法通过返回值修改内部数据内置类型加 const 无意义5. const 成员函数函数末尾加 const承诺不修改类成员mutable 修饰变量例外const 函数内仍可修改 规则const 对象只能调用 const 成员函数