C++ 常用语法速查表

把 C++ 日常开发最常用的语法整理成速查,写系统代码时对照查。

编程语言·共 44 条命令·最后更新 2026-07-19
返回 编程语言

类与对象 8

class MyClass { public: MyClass(); ~MyClass(); };
类定义
struct MyStruct { int x; int y; };
结构体(默认 public)
MyClass obj;
栈上对象
MyClass *obj = new MyClass();
堆上对象
delete obj;
释放对象
class Derived : public Base { };
继承
virtual void func() override;
虚函数重写
class Abstract { virtual void func() = 0; };
纯虚函数(抽象类)

STL 容器 8

std::vector<int> v = {1, 2, 3};
动态数组
v.push_back(4); v.size(); v[0];
vector 操作
std::list<int> l;
双向链表
std::map<std::string, int> m;
有序映射(红黑树)
std::unordered_map<std::string, int> m;
无序映射(哈希表)
std::set<int> s;
有序集合
std::stack<int> st; std::queue<int> q;
栈与队列
std::pair<int, std::string> p = {1, "one"};
键值对

智能指针 5

std::unique_ptr<int> p = std::make_unique<int>(10);
独占指针
std::shared_ptr<int> p = std::make_shared<int>(10);
共享指针(引用计数)
std::weak_ptr<int> wp = sp;
弱引用(不增加计数)
if (auto locked = wp.lock()) { }
弱引用转强引用
std::unique_ptr<int> p2 = std::move(p);
转移所有权

Lambda 表达式 6

auto fn = []() { return 42; };
无捕获 Lambda
int x = 10; auto fn = [x]() { return x; };
值捕获
auto fn = [&x]() { x++; };
引用捕获
auto fn = [=]() { return x; };
值捕获所有
auto fn = [&]() { x++; };
引用捕获所有
auto fn = [](int a, int b) { return a + b; };
带参数 Lambda

模板 4

template <typename T> T add(T a, T b) { return a + b; }
函数模板
template <typename T> class Stack { };
类模板
template <> void func<int>(int x) { }
模板特化
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
自定义排序

异常处理 5

try { } catch (const std::exception &e) { }
异常捕获
throw std::runtime_error("error");
抛出异常
catch (...) { }
捕获所有异常
noexcept
声明不抛异常
std::terminate();
终止程序

现代 C++ 特性 8

auto x = 42;
类型推导
decltype(x) y = 10;
类型声明
constexpr int MAX = 100;
编译期常量
std::optional<int> opt = 42;
可选值
std::variant<int, std::string> v = 42;
变体类型
std::any a = 42;
任意类型
for (auto &[key, value] : map) { }
结构化绑定(C++17)
std::string_view sv = "hello";
字符串视图(C++17)

💡 提示

  • 优先使用智能指针,避免手动 new/delete。
  • STL 容器选择:频繁随机访问用 vector,频繁插入删除用 list,键值查找用 unordered_map。
  • Lambda 表达式适合短小的回调函数,复杂逻辑建议用普通函数或函数对象。