真正的起点是第一次手动敲出能编译运行且理解每行行为的main();需用g++命令行跑通、加cin/cout建立i/o直觉、解析argc/argv参数、从等基础头文件起步。

从哪天开始写第一行 main() 才算真正起步
不是装完 Visual Studio 或配好 CLion 就算开始学 C++,真正的起点是你第一次手动敲出能编译、运行、且自己理解每一行行为的 main()。2026 年的新手常卡在“环境配好了但不敢动”,结果两周还在看安装教程。
- 第一天就写:用
g++ -std=c++20 hello.cpp -o hello && ./hello跑通,不依赖 IDE 的构建按钮 - 第二行必须加
std::cin和std::cout,哪怕只做温度换算——目的是建立「输入→计算→输出→内存变化」的直觉 - 拒绝跳过
int main(int argc, char* argv[])参数解析,哪怕只打印argv[0],这是你和操作系统第一次握手 - 别碰
#include <bits></bits>,从#include <iostream></iostream>和#include <string></string>开始,每个头文件都得知道它管什么
为什么 std::make_unique 要比 new 早学两周
不是因为语法高级,而是因为 2026 年所有主流 C++ 项目(包括 OBS 多路推流、kv 存储、TCP 服务器)默认禁用裸 new/delete。新手一上来就手写 new int[100],后面三个月都在修 double free 或 use-after-free。
-
std::make_unique<int>(42)</int>自动绑定生命周期,析构时自动释放,不用记谁该delete - 函数返回智能指针时,不会意外发生资源泄漏;而裸指针返回后,调用方极易忘记
delete - 面试中问「如何避免内存泄漏」,答「RAII +
std::unique_ptr」比讲原理更有效——这已是行业事实标准 - 注意陷阱:
std::shared_ptr不要滥用,循环引用(shared_ptr<a></a>持有shared_ptr<b></b>,反之亦然)会导致内存永远不释放
STL 容器选 std::vector 还是 std::deque?看这三点
不是查文档比接口,而是看你在写什么代码。2026 年真实项目里,90% 的「数组替代场景」应该无脑选 std::vector,但有两个硬条件例外。
- 需要频繁在头部插入/删除(比如实现任务队列缓冲区)→ 用
std::deque,vector的push_front()是 O(n);deque是 O(1) - 数据量极大(>100MB)且需随机访问 → 仍优先
vector,因连续内存局部性更好,deque分段存储导致 cache miss 明显升高 - 要传给 C 接口(如音视频 SDK 的
uint8_t*参数)→ 必须用vector,它保证&v[0]是连续地址;deque不保证 - 常见错误:
for (auto it = v.begin(); it != v.end(); ++it)在循环中v.push_back()→ 迭代器失效,直接崩溃;应改用索引或提前保存v.size()
CMakeLists.txt 里 target_compile_features 怎么设才不翻车
很多同学把 set(CMAKE_CXX_STANDARD 20) 当成万能开关,结果在 Ubuntu 22.04 上编译失败——因为系统 GCC 11 默认不支持 std::format,哪怕开了 C++20 也没用。
立即学习“C++免费学习笔记(深入)”;
- 必须写具体特性:
target_compile_features(myapp PRIVATE cxx_std_20 cxx_concepts cxx_ranges),CMake 会自动检查编译器是否支持 - 团队协作时,统一要求最低工具链版本:比如明确写
cmake_minimum_required(VERSION 3.22),低于此版本直接报错,不让你糊弄过去 - 别在
add_executable前漏掉project(myapp LANGUAGES CXX),否则target_compile_features无效,静默降级到 C++14 - 实际影响:OBS 插件开发、Linux 音视频服务端项目普遍要求
cxx_coroutines,没显式声明会导致协程函数编译不过
最常被忽略的不是语法多难,而是你写的每行 C++ 都在和操作系统、编译器、标准库三方实时协商——漏掉一个 PRIVATE 作用域、少写一个 std::move、误用 auto& 绑定临时对象,问题可能两周后才在压测中爆发。








