极限飞行大师手游
54.66 MB · 2025-10-30
C++ 是一种通用编程语言,由 Bjarne Stroustrup 在 C 语言基础上改进而来,旨在引入面向对象编程范式。C++ 的主要特点如下:
C++ 程序结构
基本结构规定了代码的书写顺序,否则会导致编译错误。一个标准 C++ 程序通常包含:
C++ 是一种面向对象的中间层编程语言,由 Bjarne Stroustrup 于 1979 年在贝尔实验室开发。最初命名为 “C with Classes”,1983 年更名为 C++。它在 C 语言的基础上扩展了类、继承和类型检查等特性,以支持面向对象编程。随着时间推移,C++ 经历了多个标准版本的演进,包括 C++98(c++03)、C++11、C++17、C++20,以及最新的 C++23,不断引入现代特性以提升性能与安全性。如今,C++ 仍广泛应用于系统软件、游戏引擎、竞赛编程和高性能应用程序中。
变量的内存管理
当我们“创建”或“声明”一个变量时,编译器会替它划出一块固定大小的内存,但这块内存的初始内容通常是“垃圾值”(随机数据)。
初始化(使用赋值号 = 或其它方式)才会把有意义的数据写进这块空间。
变量名本质上就是这块内存的“人话入口”,我们通过名字去读写对应地址里的数据。
int num; //声明 或 创建
num = 3; //初始化变量
float fnum = 6.57; //一步到位,声明+初始化
下面给出一张“一体化速查表”——把 C++98/03 → C++23 出现的所有保留关键字,按「功能类别→出现标准」两级分组,并在同一格内给出「作用一句话」。
(空白格表示该关键字在该标准尚未出现;● 表示首次出现;○ 表示已存在。)
| 功能类别 | 关键字 | C++98 | C++11 | C++14 | C++17 | C++20 | C++23 | |||
|---|---|---|---|---|---|---|---|---|---|---|
| 基础类型 | void | 无类型/无返回值 | ○ | ○ | ○ | ○ | ○ | |||
bool | 布尔类型,取 true/false | ○ | ○ | ○ | ○ | ○ | ||||
char | 单字节字符 | ○ | ○ | ○ | ○ | ○ | ||||
wchar_t | 宽字符 | ○ | ○ | ○ | ○ | ○ | ||||
char16_t | UTF-16 字符 | ● | ○ | ○ | ○ | ○ | ||||
char8_t | UTF-8 字符 | ● | ○ | |||||||
char32_t | UTF-32 字符 | ● | ○ | ○ | ○ | ○ | ||||
short | 短整型 | ○ | ○ | ○ | ○ | ○ | ||||
int | 整型 | ○ | ○ | ○ | ○ | ○ | ||||
long | 长整型 | ○ | ○ | ○ | ○ | ○ | ||||
signed | 有符号修饰 | ○ | ○ | ○ | ○ | ○ | ||||
unsigned | 无符号修饰 | ○ | ○ | ○ | ○ | ○ | ||||
float | 单精度浮点 | ○ | ○ | ○ | ○ | ○ | ||||
double | 双精度浮点 | ○ | ○ | ○ | ○ | ○ | ||||
| 类型推导/别名 | auto | 让编译器推导类型(C++11 起彻底改变语义) | ● | ○ | ○ | ○ | ○ | |||
decltype | 取表达式类型 | ● | ○ | ○ | ○ | ○ | ||||
typedef | 给类型起“旧式”别名 | ○ | ○ | ○ | ○ | ○ | ||||
using | 起别名/引入命名空间 | ○ | ○ | ○ | ○ | ○ | ||||
| 常量/编译期 | const | 只读常量 | ○ | ○ | ○ | ○ | ○ | |||
constexpr | 编译期可计算 | ● | ○ | ○ | ○ | ○ | ||||
consteval | 必为编译期求值的“立即函数” | ● | ○ | |||||||
constinit | 强制“静态初始化”用常量表达式 | ● | ○ | |||||||
nullptr | 类型安全的空指针字面量 | ● | ○ | ○ | ○ | ○ | ||||
true/false | 布尔字面量 | ○ | ○ | ○ | ○ | ○ | ||||
| 存储期/链接 | static | 静态存储/内部链接 | ○ | ○ | ○ | ○ | ○ | |||
extern | 外部链接声明 | ○ | ○ | ○ | ○ | ○ | ||||
register | 建议放寄存器(已废弃语义) | ○ | ○ | ○ | ○ | ○ | ||||
thread_local | 每线程一份独立存储 | ● | ○ | ○ | ○ | ○ | ||||
volatile | 禁止优化,每次真正读写内存 | ○ | ○ | ○ | ○ | ○ | ||||
| 对齐/大小 | alignas | 指定对齐要求 | ● | ○ | ○ | ○ | ○ | |||
alignof | 查询对齐值 | ● | ○ | ○ | ○ | ○ | ||||
sizeof | 查询字节大小 | ○ | ○ | ○ | ○ | ○ | ||||
| 控制流 | if/else | 条件分支 | ○ | ○ | ○ | ○ | ○ | |||
switch/case/default | 多路分支 | ○ | ○ | ○ | ○ | ○ | ||||
for/while/do | 循环 | ○ | ○ | ○ | ○ | ○ | ||||
break/continue | 跳出/下次循环 | ○ | ○ | ○ | ○ | ○ | ||||
goto | 无条件跳转 | ○ | ○ | ○ | ○ | ○ | ||||
| 编译期 if | if constexpr | 编译期条件丢弃分支 | ● | ○ | ○ | |||||
| 返回/跳转 | return | 函数返回 | ○ | ○ | ○ | ○ | ○ | |||
| 协程 | co_await | 挂起协程等待可等待对象 | ● | ○ | ||||||
co_yield | 协程“生成”一个值并挂起 | ● | ○ | |||||||
co_return | 协程返回并终止 | ● | ○ | |||||||
| 异常 | try/catch/throw | 捕获/抛出异常 | ○ | ○ | ○ | ○ | ○ | |||
noexcept | 标记函数是否可能抛异常 | ● | ○ | ○ | ○ | ○ | ||||
| 转换/RTTI | static_cast | 编译期安全转换 | ○ | ○ | ○ | ○ | ○ | |||
dynamic_cast | 运行时多态转换 | ○ | ○ | ○ | ○ | ○ | ||||
const_cast | 增删 const 限定 | ○ | ○ | ○ | ○ | ○ | ||||
reinterpret_cast | 低级别重解释转换 | ○ | ○ | ○ | ○ | ○ | ||||
typeid | 获取运行时类型信息 | ○ | ○ | ○ | ○ | ○ | ||||
| 内存管理 | new/delete | 动态分配/释放 | ○ | ○ | ○ | ○ | ○ | |||
| 类/结构/联合 | class | 定义类(默认私有) | ○ | ○ | ○ | ○ | ○ | |||
struct | 定义结构体(默认公有) | ○ | ○ | ○ | ○ | ○ | ||||
union | 定义联合(成员重叠存储) | ○ | ○ | ○ | ○ | ○ | ||||
enum | 定义枚举 | ○ | ○ | ○ | ○ | ○ | ||||
| 访问限定 | public/protected/private | 访问级别 | ○ | ○ | ○ | ○ | ○ | |||
| 友元 | friend | 授权外部函数/类访问私有成员 | ○ | ○ | ○ | ○ | ○ | |||
| this | this | 指向当前对象的指针 | ○ | ○ | ○ | ○ | ○ | |||
| 虚函数/多态 | virtual | 声明虚函数 | ○ | ○ | ○ | ○ | ○ | |||
override | 显式标记“重写”虚函数 | ● | ○ | ○ | ○ | |||||
final | 禁止派生或进一步重写 | ● | ○ | ○ | ○ | |||||
| 函数修饰 | inline | 建议内联展开;C++17 起允许多定义 | ○ | ○ | ● | ○ | ○ | |||
explicit | 禁止单参构造函数隐式转换 | ○ | ○ | ○ | ○ | ○ | ||||
| 运算符重载 | operator | 重载运算符函数名 | ○ | ○ | ○ | ○ | ○ | |||
| 模板/泛型 | template | 定义函数/类模板 | ○ | ○ | ○ | ○ | ○ | |||
typename | 模板中声明类型参数 | ○ | ○ | ○ | ○ | ○ | ||||
| 概念 | concept | 具名模板约束 | ● | ○ | ||||||
requires | 匿名/局部约束表达式 | ● | ○ | |||||||
| 断言 | static_assert | 编译期断言 | ● | ○ | ○ | ○ | ○ | |||
| 命名空间 | namespace | 定义/打开命名空间 | ○ | ○ | ○ | ○ | ○ | |||
| 模块 | module | 声明当前翻译单元为模块 | ● | |||||||
import | 导入模块或模块分区 | ● | ||||||||
| 反射 | reflexpr | 编译期获取程序元素元数据(TS 实验) | ● | |||||||
| 同步 | sync | 暂定关键字,用于并发同步语义(尚未最终定案) | (保留位) | |||||||
| 内联汇编 | asm | 直接插入汇编指令 | ○ | ○ | ○ | ○ | ○ | |||
| 位运算符拼写 | and/or/not/bitand/bitor/xor… | 可读性替代 && ` | ! & | ^` 等 | ○ | ○ | ○ | ○ | ○ |
在 C++ 中,数据的读写通过“流”(stream)完成,流就是字节序列。
这些流由头文件 <iostream> 提供。
最常用的流对象:
cin:用于输入cout:用于输出coutcout 是 ostream 类的实例,负责把结果显示到屏幕。
数据通过“插入运算符” << 送给 cout。
示例代码:
#include <iostream>
using namespace std;
int main(){
// 用 cout 打印指定文本
cout << "GeeksforGeeks";
return 0;
}
运行结果:
GeeksforGeeks
cin 是 istream 类的实例,用于从键盘读取输入。
通过提取运算符 >> 把数据从输入流读进变量。
示例代码:
#include <iostream>
using namespace std;
int main()
{
int age;
// 从用户获取输入并保存到变量
cin >> age;
// 输出刚才输入的年龄
cout << "Your age is: " << age;
return 0;
}
运行结果(用户键入 18 后按回车):
18
Your age is: 18
cerrcerr 是用于输出错误信息的标准错误流,也是 ostream 类的实例。
它会立即把消息显示出来,不等待缓冲区刷新(即无缓冲输出)。
适合把错误或警告与正常程序输出(cout)分开展示。
与 cout 的区别:
cout 可能会因缓冲而延迟显示;cerr 保证错误信息瞬间可见;cerr 的内容不会进入该文件,而是直接打印到屏幕——这就是“无缓冲”的含义。示例代码:
#include <iostream>
using namespace std;
int main()
{
cerr << "An error occurred";
return 0;
}
运行结果(立即出现在屏幕):
An error occurred
clogclog 是用于记录日志信息的标准日志流,同样属于 ostream 类。
与 cerr 不同,clog 先把消息存进缓冲区,等到缓冲区满或手动 flush() 时才真正输出——这就是**“带缓冲”的含义。
适合用来记录运行日志,这些信息不需要立刻**出现在屏幕上。
与 cerr 对比:
cerr 无缓冲,立即可见;clog 有缓冲,可能延迟显示,性能略好。示例代码:
#include <iostream>
using namespace std;
int main()
{
clog << "An error occurred";
return 0;
}
运行结果(可能稍后才出现或需手动刷新):
An error occurred