C++ 参考手册:程序员的终极速查指南
引言
C++ 是一门功能强大、应用广泛的编程语言,从系统级软件到高性能计算,再到游戏开发,无处不在。然而,其复杂的语法和庞大的标准库也常常让开发者感到头疼。本指南旨在成为 C++ 程序员的终极速查手册,提供核心语法、标准库和现代特性的快速参考,帮助您在日常开发中提高效率。
1. 基本语法 (Basic Syntax)
1.1 变量与数据类型 (Variables & Data Types)
| 类型 | 描述 | 示例 |
|---|---|---|
int |
整型 | int a = 10; |
double |
双精度浮点 | double pi = 3.14159; |
char |
字符 | char initial = 'C'; |
bool |
布尔值 | bool is_ready = true; |
std::string |
字符串 | std::string msg = "Hello"; |
auto |
自动类型推导 | auto x = 42; // x is int |
修饰符: const, static, unsigned
cpp
const double EULER = 2.718;
static int counter = 0;
1.2 运算符 (Operators)
- 算术:
+,-,*,/,% - 关系:
==,!=,<,>,<=,>= - 逻辑:
&&(and),||(or),!(not) - 位:
&,|,^,~,<<,>> - 赋值:
=,+=,-=,*=,/= - 其他:
sizeof(),? :(三元),.(成员访问),->(指针访问)
1.3 控制流 (Control Flow)
if-else
cpp
if (condition) {
// ...
} else if (other_condition) {
// ...
} else {
// ...
}
switch
cpp
switch (variable) {
case value1:
// ...
break;
case value2:
// ...
break;
default:
// ...
}
for循环
cpp
for (int i = 0; i < 10; ++i) {
// ...
}
范围for循环 (C++11)
“`cpp
include
std::vector
for (int num : nums) {
// …
}
“`
while循环
cpp
while (condition) {
// ...
}
1.4 函数 (Functions)
“`cpp
// 声明
return_type function_name(parameter_type parameter_name);
// 定义
return_type function_name(parameter_type parameter_name) {
// 函数体
return value;
}
// 示例:返回两数之和
int add(int a, int b) {
return a + b;
}
“`
2. 面向对象编程 (Object-Oriented Programming)
2.1 类与对象 (Classes & Objects)
“`cpp
class MyClass {
public:
// 构造函数
MyClass(int val) : my_var(val) {}
// 成员函数
void my_method() const {
// const 成员函数不能修改成员变量
}
// 静态成员变量
static int static_var;
private:
// 成员变量
int my_var;
};
// 静态成员变量初始化
int MyClass::static_var = 0;
// 创建对象
MyClass obj(42);
“`
- 访问修饰符:
public: 任何地方都可访问。private: 只能在类内部访问。protected: 类内部及子类可访问。
2.2 继承与多态 (Inheritance & Polymorphism)
“`cpp
// 基类
class Shape {
public:
// 虚函数
virtual void draw() const { / … / }
// 纯虚函数(使基类成为抽象类)
virtual double area() const = 0;
// 虚析构函数
virtual ~Shape() = default;
};
// 派生类
class Circle : public Shape {
public:
void draw() const override { / … / }
double area() const override { / … / }
};
``override
-(C++11): 显式覆盖基类虚函数。final` (C++11): 阻止进一步的类继承或虚函数覆盖。
-
3. 标准模板库 (Standard Template Library – STL)
3.1 常用容器 (Common Containers)
| 容器 | 头文件 | 描述 |
|---|---|---|
std::vector |
<vector> |
动态数组,随机访问快 |
std::string |
<string> |
字符序列 |
std::map |
<map> |
键值对集合,按键排序 |
std::unordered_map |
<unordered_map> |
哈希实现的键值对集合 |
std::set |
<set> |
唯一元素集合,自动排序 |
std::deque |
<deque> |
双端队列 |
Vector 示例
“`cpp
include
std::vector
vec.push_back(10); // [10]
vec.push_back(20); // [10, 20]
int first = vec[0]; // 10
for (int val : vec) { / … / }
“`
Map 示例
“`cpp
include
std::map
ages[“Alice”] = 30;
ages[“Bob”] = 25;
int alice_age = ages[“Alice”]; // 30
“`
3.2 常用算法 (Common Algorithms)
需要包含 <algorithm> 头文件。
| 算法 | 描述 |
|---|---|
std::sort |
对容器或数组排序 |
std::find |
在序列中查找值 |
std::for_each |
对序列中每个元素执行操作 |
std::count |
统计序列中特定值的出现次数 |
std::copy |
复制序列 |
std::reverse |
反转序列 |
“`cpp
include
include
std::vector
std::sort(v.begin(), v.end()); // v becomes {1, 3, 4}
auto it = std::find(v.begin(), v.end(), 4);
if (it != v.end()) {
// 找到了
}
“`
3.3 智能指针 (Smart Pointers)
需要包含 <memory> 头文件,用于自动管理内存,防止内存泄漏。
| 指针 | 描述 |
|---|---|
std::unique_ptr |
独占所有权的智能指针,无法复制 |
std::shared_ptr |
共享所有权的智能指针,通过引用计数管理生命周期 |
std::weak_ptr |
shared_ptr 的观察者,不增加引用计数,防止循环引用 |
cpp
// C++14 and later
std::unique_ptr<int> p1 = std::make_unique<int>(10);
std::shared_ptr<int> p2 = std::make_shared<int>(20);
4. 现代 C++ 特性 (Modern C++ Features)
4.1 Lambda 表达式
一种在代码中定义匿名函数对象的便捷方式。
“`cpp
// 捕获列表 -> 返回类型 { 函数体 }
auto add = -> int {
return a + b;
};
int sum = add(5, 3); // sum is 8
std::vector
int x = 10;
// 按值捕获x,按引用捕获所有其他变量
std::for_each(nums.begin(), nums.end(), x, &{
n += x;
});
“`
4.2 nullptr
C++11 引入 nullptr 来代替 NULL,它是一个类型安全的空指针常量。
“`cpp
void foo(int);
void foo(char*);
foo(NULL); // 可能调用 foo(int)
foo(nullptr); // 调用 foo(char*)
“`
5. 输入/输出 (Input/Output)
5.1 控制台 I/O
需要包含 <iostream>。
“`cpp
include
include
int main() {
int age;
std::string name;
std::cout << "Enter your name: ";
std::getline(std::cin, name); // 读取整行
std::cout << "Enter your age: ";
std::cin >> age;
std::cout << "Hello, " << name << "! You are " << age << " years old." << std::endl;
return 0;
}
“`
5.2 文件 I/O
需要包含 <fstream>。
写文件
“`cpp
include
std::ofstream ofile(“data.txt”);
if (ofile.is_open()) {
ofile << “Hello, File!” << std::endl;
ofile.close();
}
“`
读文件
“`cpp
include
include
std::ifstream ifile(“data.txt”);
std::string line;
if (ifile.is_open()) {
while (std::getline(ifile, line)) {
// 处理每一行
}
ifile.close();
}
“`
结语
本速查指南涵盖了 C++ 日常开发中最常用到的核心部分。C++ 是一门不断发展的语言,掌握其核心并持续学习 C++11/14/17/20/23 等新标准中的优秀特性,将使您的开发工作如虎添翼。建议将 cppreference.com 作为更详细、更深入研究的权威参考。