学而时习之:C++语言基础了解

C++ 简介

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

  1. 简洁:程序可拆分为逻辑单元与模块,配套丰富的标准库和多样的数据类型。
  2. 机器无关:只要有合适的编译器,同一份 C++ 代码可在任意机器上运行。
  3. 底层访问:可直接操作系统资源,非常适合系统级编程与高效代码编写。
  4. 执行速度快:几乎没有额外运行时开销,是运行最快的高级语言之一。
  5. 面向对象:相对 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++ 仍广泛应用于系统软件、游戏引擎、竞赛编程和高性能应用程序中。

C++ 变量类型

C++ 变量声明 与 初始化

变量的内存管理

当我们"创建"或"声明 "一个变量时,编译器会替它划出一块固定大小的内存,但这块内存的初始内容通常是"垃圾值"(随机数据)。
初始化 (使用赋值号 = 或其它方式)才会把有意义的数据写进这块空间。

变量名本质上就是这块内存的"人话入口",我们通过名字去读写对应地址里的数据。

c++ 复制代码
int num;  //声明 或 创建
num = 3;  //初始化变量

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

C++ 关键字的分类

下面给出一张"一体化速查表"------把 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++ 基本输入/输出

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

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

这些流由头文件 <iostream> 提供。

最常用的流对象:

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

标准输出流 - cout

coutostream 类的实例,负责把结果显示到屏幕。

数据通过"插入运算符" << 送给 cout

示例代码:

cpp 复制代码
#include <iostream>
using namespace std;

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

运行结果:

复制代码
GeeksforGeeks

标准输入流 - cin

cinistream 类的实例,用于从键盘读取输入。

通过提取运算符 >> 把数据从输入流读进变量。

示例代码:

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    int age;

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

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

    return 0;
}

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

csharp 复制代码
18
Your age is: 18

无缓冲标准错误流 --- cerr

cerr 是用于输出错误信息的标准错误流,也是 ostream 类的实例。

它会立即 把消息显示出来,不等待缓冲区刷新 (即无缓冲输出 )。

适合把错误或警告与正常程序输出(cout)分开展示。

cout 的区别:

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

示例代码:

cpp 复制代码
#include <iostream>
using namespace std;

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

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

go 复制代码
An error occurred

带缓冲的标准错误流 --- clog

clog 是用于记录日志信息的标准日志流,同样属于 ostream 类。

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

cerr 对比:

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

示例代码:

cpp 复制代码
#include <iostream>
using namespace std;

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

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

go 复制代码
An error occurred
相关推荐
承渊政道3 小时前
算法复杂度
c语言·数据结构·c++·算法·visual studio
千年奇葩4 小时前
Unity性能优化之:利用CUDA加速Unity实现大规模并行计算。从环境搭建到实战案例
c++·人工智能·unity·游戏引擎·cuda
AA陈超4 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-25 属性信息数据资产
c++·游戏·ue5·游戏引擎·虚幻
_dindong4 小时前
Linux网络编程:进程间关系和守护进程
linux·运维·服务器·网络·c++·学习
zhilin_tang4 小时前
如何写一个WebRTC ACE音频应用处理模块
linux·c语言·c++
Skrrapper4 小时前
【C++】C++11都有什么新特性?
数据结构·c++
小丁努力不焦虑5 小时前
c++基本语法
java·c++·算法
qq_310658515 小时前
webrtc代码走读(五)-QOS-FEC原理
网络·c++·webrtc
Want5956 小时前
C/C++动态爱心
c++