C++学习笔记Day1
错误码和异常的区别以及各自优势
**错误码 (error_code):**显式返回错误状态,可预期、常规错误,纯值传递,性能无损耗。
**C++ 异常 (throw/catch):**隐式向上抛出,意外 / 致命错误,靠栈展开传递,有运行时开销。
- 用错误码
文件打开、读写、路径不存在
Socket 异步读写、网络超时、连接断开
参数校验、数据解析、格式错误
底层 SDK、高频工具函数、嵌入式代码 - 用异常
内存分配失败 std::bad_alloc
数组越界、非法内存访问等编程错误
程序无法继续运行的致命故障
RAII
RAII 全称:Resource Acquisition Is Initialization
直译:资源获取即初始化,是 C++ 管理资源的核心范式。
判断代码是否使用RAII
无 RAII:手动 new/delete、malloc/free、fopen/fclose 这类原生资源,自己写代码释放。
有 RAII:把资源包进类对象,靠构造拿资源、析构自动释放,不用手动写释放代码。
这些标准库全是 RAII 思想实现:
std::unique_ptr / std::shared_ptr
管理堆内存,析构自动 delete → 智能指针
std::lock_guard / std::unique_lock
管理互斥锁,构造加锁、析构解锁 → 线程锁自动管理
std::fstream
文件流,构造打开文件,析构关闭
你前面学的 boost::system::error_code 相关容器、异步句柄
网络 Socket、IO 句柄管理也大量用 RAII
引用
引用 = 变量的「别名」,它不分配独立内存,和原变量指向同一块内存。
内存优化方法(引用)
#include <vector>
#include <string>
struct User{
std::string name;
int age;
bool is_male;
}
// ✅ 常量引用:容器无拷贝,只读安全
void calc_user_stats(const std::vector<User>& users) {
int male_cnt = 0;
int total_age = 0;
// 元素也用常量引用,不生成临时对象
for (const auto& u : users) {
if (u.is_male) male_cnt++;
total_age += u.age;
}
double avg_age = static_cast<double>(total_age) / users.size();
// 打印统计结果...
}
int main() {
std::vector<User> user_list = {
{"张三", 22, true},
{"李四", 25, false},
{"王五", 30, true}
};
calc_user_stats(user_list); // 调用时深拷贝整个容器
return 0;
users是包含多个结构体User的列表,如实例化的user_list
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)