C++速成指南:从基础到进阶
C++ 是一门功能强大且复杂的编程语言,广泛应用于系统编程、游戏开发、高性能计算等领域。对于刚入门的开发者来说,C++ 的学习曲线可能会显得陡峭。本文将带领你快速掌握 C++ 的核心概念和常用特性,帮助你在短时间内建立起扎实的基础。
一、C++ 基础语法
1. 小程序 “Hello World”
让我们从最经典的 “Hello World” 程序开始:
#include <iostream>int main() {std::cout << "Hello World!" << std::endl;return 0;
}
#include <iostream>
:包含输入输出流库。std::cout
:标准输出流,用于向控制台输出内容。std::endl
:表示换行。
2. 命名空间
为了避免命名冲突,C++ 引入了命名空间的概念。std
是标准库的命名空间。
using namespace std; // 引入整个 std 命名空间(不推荐在实际项目中使用)
3. 字面量
字面量是直接出现在代码中的值,例如:
int num = 42; // 整数字面量
double pi = 3.14; // 浮点数字面量
char c = 'A'; // 字符字面量
4. 变量
变量用于存储数据,声明变量时需要指定类型:
int a = 10; // 整数
double b = 3.14; // 浮点数
bool c = true; // 布尔值
5. 运算符
C++ 支持多种运算符,包括:
- 算术运算符:
+
,-
,*
,/
,%
- 赋值运算符:
=
,+=
,-=
等 - 比较运算符:
==
,!=
,>
,<
,>=
,<=
int a = 5, b = 3;
int sum = a + b; // 8
int diff = a - b; // 2
6. 枚举
枚举用于定义一组命名的整数常量:
enum Direction {UP, DOWN, LEFT, RIGHT
};
7. 结构体
结构体(struct
)用于封装多个相关数据成员:
struct Point {int x;int y;
};
8. 条件语句
int a = 5;
if (a > 0) {std::cout << "a is positive" << std::endl;
} else if (a == 0) {std::cout << "a is zero" << std::endl;
} else {std::cout << "a is negative" << std::endl;
}
9. 条件运算符
int a = 5;
int b = (a > 0) ? 1 : 0; // b = 1
10. 逻辑比较运算符
bool a = true, b = false;
bool c = a && b; // false
bool d = a || b; // true
11. 三向比较运算符(C++20)
int a = 5, b = 10;
std::cmp_lessgreater cmp = a <=> b; // cmp = std::less
二、函数与代码组织
12. 函数
函数是代码的可重用块,用于执行特定任务:
void greet() {std::cout << "Hello!" << std::endl;
}int add(int a, int b) {return a + b;
}
13. 属性
属性([[attribute]]
)用于向编译器提供额外信息,例如:
[[nodiscard]] int computeSomething() {// 返回一个重要的值,建议调用者检查返回值return 42;
}
三、数据结构与容器
14. 数组
C 风格数组
int arr[5] = {1, 2, 3, 4, 5}; // 长度为 5 的数组
std::array
std::array
是固定大小的数组容器,提供更好的类型安全性和功能:
#include <array>std::array<int, 5> arr = {1, 2, 3, 4, 5};
15. std::vector
std::vector
是动态数组,支持动态扩展:
#include <vector>std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6); // 添加元素
16. std::pair
std::pair
用于存储两个相关联的值:
#include <utility>std::pair<int, double> p = {1, 3.14};
17. std::optional
std::optional
用于表示一个值可能存在或不存在:
#include <optional>std::optional<int> opt = 42;
if (opt) {std::cout << *opt << std::endl;
}
18. 结构化绑定
结构化绑定(C++17 引入)可以简化对容器的访问:
std::pair<int, int> p = {1, 2};
auto [a, b] = p; // a = 1, b = 2
19. 初始化列表
初始化列表({}
)用于初始化容器或结构体:
std::vector<int> vec = {1, 2, 3, 4, 5};
struct Point p = {1, 2};
四、字符串与面向对象编程
20. C++ 中的字符串
std::string
是 C++ 中的字符串类,提供丰富的功能:
#include <string>std::string str = "Hello";
str += " World!"; // str = "Hello World!"
21. 作为面向对象语言的 C++
C++ 支持面向对象编程(OOP),包括类、对象、继承和多态。
类与对象
class Point {
public:int x;int y;
};Point p;
p.x = 1;
p.y = 2;
继承
class Animal {
public:virtual void sound() = 0; // 纯虚函数
};class Dog : public Animal {
public:void sound() override {std::cout << "Woof!" << std::endl;}
};
多态
Animal* a = new Dog();
a->sound(); // 输出 "Woof!"
delete a;
五、作用域与内存管理
22. 作用域解析
作用域解析运算符 ::
用于访问全局作用域或特定命名空间中的成员:
namespace MyNamespace {int value = 42;
}int main() {int value = 5;std::cout << MyNamespace::value << std::endl; // 42std::cout << ::value << std::endl; // 5(全局作用域)
}
23. 指针和动态内存
指针用于直接操作内存地址:
int* p = new int(42); // 动态分配内存
std::cout << *p << std::endl; // 42
delete p; // 释放内存
24. const
的用法
const
用于声明常量:
const int a = 42; // a 不能被修改
const int* p = &a; // p 指向常量
int const* p2 = &a; // 同上
25. constexpr
关键字
constexpr
用于在编译时计算常量表达式:
constexpr int square(int x) {return x * x;
}
int a = square(5); // a = 25,编译时计算
26. consteval
关键字
consteval
(C++23 引入)用于强制函数在编译时执行:
consteval int cube(int x) {return x * x * x;
}
int a = cube(3); // a = 27,编译时计算
27. 引用
引用用于创建变量的别名:
int a = 42;
int& ref = a; // ref 引用 a
ref = 50; // a 变为 50
28. const_cast()
const_cast
用于去除 const
限定:
const int a = 42;
int* p = const_cast<int*>(&a); // 去除 const 限定
*p = 50; // 修改 a 的值(虽然 a 是 const,但这里是不安全的操作)
六、异常处理与类型系统
29. 异常
异常用于处理程序运行时的错误:
try {throw std::runtime_error("An error occurred");
} catch (const std::exception& e) {std::cout << e.what() << std::endl; // 输出 "An error occurred"
}
30. 类型别名
类型别名用于为现有类型创建新的名称:
using MyInt = int;
MyInt a = 42;
31. 类型定义
typedef
用于定义类型别名:
typedef int MyInt;
MyInt a = 42;
32. 类型推断
auto
和 decltype
用于推断变量的类型:
auto a = 42; // a 是 int
auto b = 3.14; // b 是 double
七、标准库与高级特性
33. 标准库(STL)
C++ 标准库(STL)提供了丰富的功能,包括容器、算法、迭代器等。例如:
#include <vector>
#include <algorithm>std::vector<int> vec = {3, 1, 4, 1, 5};
std::sort(vec.begin(), vec.end()); // 排序后 vec = {1, 1, 3, 4, 5}
34. 统一初始化
统一初始化语法(C++11 引入)允许使用 {}
初始化所有对象:
int a = {5}; // 初始化为 5
std::vector<int> v = {1, 2, 3}; // 初始化为 {1, 2, 3}
总结
C++ 是一门功能强大的语言,但也需要时间和实践来掌握。本文从基础语法到面向对象编程,再到内存管理和高级特性,为你提供了一个全面的速成指南。希望这篇文章能帮助你快速入门 C++,并在后续的学习中不断深入。