C++ 简介

C++ 是一种通用编程语言,由 Bjarne Stroustrup 在 C 语言基础上改进而来,旨在引入面向对象编程范式。C++ 的主要特点如下:

  1. 简洁:程序可拆分为逻辑单元与模块,配套丰富的标准库和多样的数据类型。
  2. 机器无关:只要有合适的编译器,同一份 C++ 代码可在任意机器上运行。
  3. 底层访问:可直接操作系统资源,非常适合系统级编程与高效代码编写。
  4. 执行速度快:几乎没有额外运行时开销,是运行最快的高级语言之一。
  5. 面向对象:相对 C 的最大优势,支持封装、继承、多态,使程序更易维护、扩展,适合构建大型应用。

C++ 程序结构
基本结构规定了代码的书写顺序,否则会导致编译错误。一个标准 C++ 程序通常包含: 程序结构1.png

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++ 仍广泛应用于系统软件、游戏引擎、竞赛编程和高性能应用程序中。

C++ 变量类型

c++数据类型.png

C++ 变量声明 与 初始化

变量的内存管理
当我们“创建”或“声明”一个变量时,编译器会替它划出一块固定大小的内存,但这块内存的初始内容通常是“垃圾值”(随机数据)。
初始化(使用赋值号 = 或其它方式)才会把有意义的数据写进这块空间。
变量名本质上就是这块内存的“人话入口”,我们通过名字去读写对应地址里的数据。

int num;  //声明 或 创建
num = 3;  //初始化变量

float fnum = 6.57; //一步到位,声明+初始化

C++ 关键字的分类

下面给出一张“一体化速查表”——把 C++98/03 → C++23 出现的所有保留关键字,按「功能类别→出现标准」两级分组,并在同一格内给出「作用一句话」。
(空白格表示该关键字在该标准尚未出现;● 表示首次出现;○ 表示已存在。)

功能类别关键字C++98C++11C++14C++17C++20C++23
基础类型void无类型/无返回值
bool布尔类型,取 true/false
char单字节字符
wchar_t宽字符
char16_tUTF-16 字符
char8_tUTF-8 字符
char32_tUTF-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无条件跳转
编译期 ifif constexpr编译期条件丢弃分支
返回/跳转return函数返回
协程co_await挂起协程等待可等待对象
co_yield协程“生成”一个值并挂起
co_return协程返回并终止
异常try/catch/throw捕获/抛出异常
noexcept标记函数是否可能抛异常
转换/RTTIstatic_cast编译期安全转换
dynamic_cast运行时多态转换
const_cast增删 const 限定
reinterpret_cast低级别重解释转换
typeid获取运行时类型信息
内存管理new/delete动态分配/释放
类/结构/联合class定义类(默认私有)
struct定义结构体(默认公有)
union定义联合(成员重叠存储)
enum定义枚举
访问限定public/protected/private访问级别
友元friend授权外部函数/类访问私有成员
thisthis指向当前对象的指针
虚函数/多态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++ 基本输入/输出

在 C++ 中,数据的读写通过“流”(stream)完成,流就是字节序列

  • 输入流:数据从设备(如键盘)流向计算机内存。
  • 输出流:数据从内存流向输出设备(如cmd控制台,打印机,手机屏幕,电脑屏幕等)。

这些流由头文件 <iostream> 提供。
最常用的流对象:

  • cin:用于输入
  • cout:用于输出

标准输出流 - cout

coutostream 类的实例,负责把结果显示到屏幕。
数据通过“插入运算符” << 送给 cout

示例代码:

#include <iostream>
using namespace std;

int main(){
    // 用 cout 打印指定文本
    cout << "GeeksforGeeks";
    
    return 0;
}

运行结果:

GeeksforGeeks

标准输入流 - cin

cinistream 类的实例,用于从键盘读取输入。
通过提取运算符 >> 把数据从输入流读进变量。

示例代码:

#include <iostream>
using namespace std;

int main()
{
    int age;

    // 从用户获取输入并保存到变量
    cin >> age;

    // 输出刚才输入的年龄
    cout << "Your age is: " << age;

    return 0;
}

运行结果(用户键入 18 后按回车):

18
Your age is: 18

无缓冲标准错误流 — cerr

cerr 是用于输出错误信息的标准错误流,也是 ostream 类的实例。
它会立即把消息显示出来,不等待缓冲区刷新(即无缓冲输出)。
适合把错误或警告与正常程序输出(cout)分开展示。

cout 的区别:

  • cout 可能会因缓冲而延迟显示;
  • cerr 保证错误信息瞬间可见
  • 如果把程序输出重定向到文件,cerr 的内容不会进入该文件,而是直接打印到屏幕——这就是“无缓冲”的含义。

示例代码:

#include <iostream>
using namespace std;

int main()
{
    cerr << "An error occurred";
    return 0;
}

运行结果(立即出现在屏幕):

An error occurred

带缓冲的标准错误流 — clog

clog 是用于记录日志信息的标准日志流,同样属于 ostream 类。
cerr 不同,clog 先把消息存进缓冲区,等到缓冲区满或手动 flush() 时才真正输出——这就是**“带缓冲”的含义。
适合用来记录运行日志,这些信息
不需要立刻**出现在屏幕上。

cerr 对比:

  • cerr 无缓冲,立即可见;
  • clog 有缓冲,可能延迟显示,性能略好。

示例代码:

#include <iostream>
using namespace std;

int main()
{
    clog << "An error occurred";
    return 0;
}

运行结果(可能稍后才出现或需手动刷新):

An error occurred
本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]