当前位置: 首页 > news >正文

C++ 入门核心知识

一、C++ 课程概述与发展历史

1. 发展历程:从 C 语言扩展到标准化

C++ 的起源可追溯至 1979 年,由贝尔实验室的 Bjarne Stroustrup 主导开发。当时他为解决大型项目开发中 C 语言在可维护性和扩展性上的不足,在 C 语言基础上引入了面向对象编程特性。

  • 1983 年:正式命名为 C++,具备类、封装、继承等核心概念
  • 1989 年:启动标准化工作,成立 ANSI 和 ISO 联合委员会
  • 1998 年:首个国际标准 C++98 发布,引入 STL(由 Alexander Stepanov 等人开发)
  • 持续演进:形成了 C++03、C++11、C++14、C++17、C++20、C++23 等版本迭代

2. 版本迭代里程碑

版本发布年份核心特性
C++981998第一个官方版本,引入 STL
C++032003修复 C++98 漏洞,增强稳定性
C++112011革命性更新:lambda、智能指针、右值引用、线程库等
C++142014完善 C++11:泛型 lambda、返回值类型推导
C++172017if constexpr、折叠表达式、文件系统库
C++202020协程、概念(Concepts)、模块化(Modules)
C++232023print 函数、flat_map、import std 导入标准库
C++262026制定中

趣闻:C++23 原定计划包含网络库(networking),但因内部技术路线争议(Senders/Receivers 与 Asio 之争)被推迟至 C++26,引发社区广泛讨论。

二、C++ 的地位与应用领域

1. 编程语言排行榜

根据 2024 年 6 月 TIOBE 排行榜,C++ 位列第二(10.03%),仅次于 Python,领先于 C、Java 等语言。其长期保持高排名的原因在于兼顾性能与抽象能力。

2. 主要应用领域

  • 系统开发:操作系统、编译器、数据库(如 MySQL)
  • 音视频处理:FFmpeg、WebRTC 等核心库
  • 客户端开发:Qt 框架构建的桌面应用(如 WPS)
  • 游戏开发:UE4、Cocos2d-x 等引擎
  • 嵌入式系统:智能设备、车载系统
  • 高性能服务:高频交易、流媒体服务器
  • 机器学习引擎:底层算法实现(上层多为 Python 封装)

三、C++ 基础语法

1. 第一个 C++ 程序

C++ 兼容 C 语言语法,但有自己的输入输出体系:

// C风格实现
#include <stdio.h>
int main() {printf("hello world\n");return 0;
}// C++风格实现
#include <iostream>
using namespace std;  // 命名空间展开
int main() {cout << "hello world" << endl;  // endl等价于换行+刷新缓冲区return 0;
}

2. 命名空间(namespace)

解决命名冲突问题,将标识符本地化:

定义方式
// 基本定义
namespace scr {int rand = 10;  // 与标准库rand函数不冲突int Add(int a, int b) { return a + b; }struct Node { int val; Node* next; };
}// 嵌套定义
namespace scr {namespace s {int x = 1;}namespace c {int x = 2;}
}
使用方式

// 1. 指定命名空间访问(推荐)
scr::Add(1, 2);// 2. 展开单个成员
using scr::s::x;
cout << x << endl;  // 直接使用x// 3. 展开全部成员(不推荐在项目中使用)
using namespace scr;
Add(1, 2);  // 直接使用

3. C++ 输入输出

通过 iostream 库实现,自动识别类型:

#include <iostream>
using namespace std;int main() {int a;double b;char c;// 输入cin >> a >> b >> c;  // 无需格式控制符// 输出cout << a << " " << b << " " << c << endl;// 提高IO效率(竞赛常用)ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;
}

4. 缺省参数

函数声明时指定默认值,调用时可省略实参:

分类
// 全缺省参数
void Func1(int a = 10, int b = 20, int c = 30) {}// 半缺省参数(必须从右往左连续设置)
void Func2(int a, int b = 10, int c = 20) {}
注意事项
  • 调用时必须从左到右传参,不能跳跃
  • 声明与定义分离时,缺省值只能在声明中指定
  • 应用场景:初始化函数(如栈的初始化可指定默认容量)

// 栈初始化示例
void STInit(ST* ps, int n = 4) {  // 声明中指定缺省值ps->a = (int*)malloc(n * sizeof(int));ps->top = 0;ps->capacity = n;
}// 调用
ST s1;
STInit(&s1);  // 使用默认值4
ST s2;
STInit(&s2, 1000);  // 自定义容量

5. 函数重载

允许同一作用域中定义同名函数,需满足形参列表不同(类型 / 个数 / 顺序):

// 1. 参数类型不同
int Add(int a, int b) { return a + b; }
double Add(double a, double b) { return a + b; }// 2. 参数个数不同
void f() { cout << "f()" << endl; }
void f(int a) { cout << "f(int)" << endl; }// 3. 参数顺序不同
void f(int a, char b) { cout << "f(int, char)" << endl; }
void f(char a, int b) { cout << "f(char, int)" << endl; }

注意:返回值不同不能作为重载条件,会导致调用歧义。

6. 引用(&)

为已有变量取别名,与原变量共享内存空间:

基本特性

int a = 10;
int& b = a;  // b是a的别名
int& c = b;  // c也是a的别名// 特性1:必须初始化
// int& d;  // 编译错误// 特性2:一旦引用一个实体,不能再引用其他实体
int x = 20;
b = x;  // 这是赋值,不是更改引用
应用场景
  1. 引用传参:替代指针,简化代码

void Swap(int& x, int& y) {  // 无需指针解引用int tmp = x;x = y;y = tmp;
}

  1. 引用返回:减少拷贝,可直接修改返回值

int& STTop(ST& s) {  // 返回栈顶元素引用return s.a[s.top - 1];
}// 调用
ST s;
STPush(s, 10);
STTop(s) += 5;  // 直接修改栈顶元素
const 引用

限制对引用对象的修改,可引用常量和临时对象:

const int a = 10;
const int& ra = a;  // 必须用const引用int b = 20;
const int& rb = b;  // 权限缩小,允许
// rb = 30;  // 编译错误,不能修改const int& rc = 10;  // 可引用常量
const int& rd = a + b;  // 可引用表达式临时结果

7. 内联函数(inline)

编译时在调用处展开,避免函数调用的栈帧开销:

inline int Add(int a, int b) {  // 内联声明return a + b;
}int main() {int ret = Add(1, 2);  // 编译时展开为ret = 1 + 2return 0;
}

特点

  • 适用于频繁调用的短小函数(通常少于 10 行)
  • 递归函数不会被内联
  • 声明与定义通常不分离(避免链接错误)
  • 替代 C 语言的宏函数,兼顾效率与安全性

8. nullptr

C++11 引入的空指针常量,解决 NULL 的二义性:

void f(int x) { cout << "f(int)" << endl; }
void f(int* p) { cout << "f(int*)" << endl; }int main() {f(0);         // 调用f(int)f(NULL);      // NULL被定义为0,仍调用f(int)f((int*)NULL);// 需显式转换才能调用f(int*)f(nullptr);   // 直接调用f(int*),推荐用法return 0;
}

四、C++ 学习建议

1. 难度认知

C++ 因历史包袱和特性复杂性,学习曲线较陡峭。网上流传的 "21 天精通 C++" 是笑话,实际掌握需要长期实践。

2. 学习方法

  • 多练习课堂示例,理解每个知识点
  • 整理笔记或博客,尤其是重点章节
  • 参与项目开发,将理论应用于实践

3. 推荐书籍

  • 《C++ Primer》:语法权威指南,适合全程参考
  • 《STL 源码剖析》(侯捷):深入理解 STL 实现原理
  • 《Effective C++》(Scott Meyers):55 个高效使用 C++ 的准则

五、总结

C++ 作为一门兼顾性能与抽象能力的编程语言,既保留了 C 语言的底层操作能力,又引入了面向对象编程和泛型编程等高级特性。本文从发展历史、核心语法到学习建议,全面覆盖了 C++ 入门的关键知识点。

掌握这些基础是深入学习 STL 和高阶数据结构的前提。建议在实践中逐步理解各特性的设计初衷和适用场景,避免机械记忆。C++ 的学习是一个持续精进的过程,随着实践深入,对语言特性的理解会不断加深。

http://www.dtcms.com/a/343549.html

相关文章:

  • 【时时三省】汽车安全 专栏简介
  • strspn函数详解
  • TorchInductor - Introduction
  • 50 C++ STL模板库-算法库 algorithm
  • 使用C++17标准 手写一个vector
  • Python核心技术开发指南(001)——Python简介
  • 基于单片机教室照明灯控制系统
  • 数据结构:生成 (Generating) 一棵 AVL 树
  • 域名污染怎么清洗?域名污染如何处理?
  • 8.21作业
  • 【运维进阶】if 条件语句的知识与实践
  • AI设计师-标小智旗下AI在线设计平台
  • 洛谷 P4942 小凯的数字-普及-
  • Hybrid laser 是什么?
  • BFS算法C++实现(邻接表存储)
  • 最爱--中岛美雪
  • 8 月 20 日科技新动态:多领域创新成果涌现
  • 【typenum】 19 类型相同检查(type_operators.rs片段)
  • Esp32基础(⑩超声波测距模块)
  • Pycharm SSH连接
  • Wireshark数据包波形绘制异常
  • [RestGPT] docs | RestBench评估 | 配置与环境
  • 【51单片机】【protues仿真】基于51单片机16键电子琴系统
  • 【GPT入门】第51课 Conda环境迁移教程:将xxzh环境从默认路径迁移到指定目录
  • OpenAI 开源模型 gpt-oss 是在合成数据上训练的吗?一些合理推测
  • Mysql事务特性
  • python实现根据接口返回数据生成报告和图表
  • (第二十期下)超链接的更多分类
  • 医疗元宇宙:破解医疗困局与数字化变革路径
  • gRPC 服务发现选型对比