Skip to content

Commit 4bf4cd5

Browse files
committed
first commit
0 parents  commit 4bf4cd5

15 files changed

Lines changed: 1092 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: Build Sphinx Docs
2+
3+
on:
4+
push:
5+
branches: [ main ] # 当 main 分支有更新时触发
6+
pull_request:
7+
branches: [ main ] # 当有 PR 指向 main 分支时触发
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v4
16+
17+
- name: Set up Python
18+
uses: actions/setup-python@v5
19+
with:
20+
python-version: '3.x' # 使用 3.x 版本的 Python
21+
22+
- name: Install dependencies
23+
run: |
24+
python -m pip install --upgrade pip
25+
pip install -r requirements.txt # 假设您已经创建了 requirements.txt
26+
27+
- name: Build HTML
28+
run: |
29+
make html # 或者使用 sphinx-build source build/html

LICENSE

Lines changed: 402 additions & 0 deletions
Large diffs are not rendered by default.

Makefile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Minimal makefile for Sphinx documentation
2+
#
3+
4+
# You can set these variables from the command line, and also
5+
# from the environment for the first two.
6+
SPHINXOPTS ?=
7+
SPHINXBUILD ?= sphinx-build
8+
SOURCEDIR = source
9+
BUILDDIR = build
10+
11+
# Put it first so that "make" without argument is like "make help".
12+
help:
13+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14+
15+
.PHONY: help Makefile
16+
17+
# Catch-all target: route all unknown targets to Sphinx using the new
18+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19+
%: Makefile
20+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

README.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<div align="center">
2+
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=32&letterSpacing=&pause=1000&center=true&vCenter=true&width=1024&height=100&lines=Modern+C%2B%2B+Full-Stack+Tutorial" alt="Typing SVG" />
3+
</div>
4+
5+
<!-- <div align="center">
6+
<a href="https://github.com/YOUR_USERNAME/YOUR_REPOSITORY/actions/workflows/ci.yml"><img src="https://github.com/YOUR_USERNAME/YOUR_REPOSITORY/actions/workflows/ci.yml/badge.svg" alt="Build Status"></a>
7+
<a href="https://github.com/YOUR_USERNAME/YOUR_REPOSITORY/blob/main/LICENSE"><img src="https://img.shields.io/github/license/YOUR_USERNAME/YOUR_REPOSITORY" alt="License"></a>
8+
<a href="https://github.com/YOUR_USERNAME/YOUR_REPOSITORY/commits/main"><img src="https://img.shields.io/github/last-commit/YOUR_USERNAME/YOUR_REPOSITORY" alt="Last Commit"></a>
9+
</div> -->
10+
11+
<div align="center">
12+
<h2>
13+
面向自学者的 C++ 全栈开发教程
14+
</h2>
15+
</div>
16+
17+
<div align="center">
18+
<img src="https://cdn.simpleicons.org/ubuntu/E95420" height="40" alt="ubuntu logo" />
19+
<img width="12" />
20+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/cplusplus/cplusplus-original.svg" height="40" alt="cplusplus logo" />
21+
<img width="12" />
22+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/clion/clion-original.svg" height="40" alt="clion logo" />
23+
<img width="12" />
24+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/cmake/cmake-original.svg" height="40" alt="cmake logo" />
25+
<img width="12" />
26+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/postgresql/postgresql-original.svg" height="40" alt="postgresql logo" />
27+
<img width="12" />
28+
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/qt/qt-original.svg" height="40" alt="qt logo" />
29+
</div>
30+
31+
<!-- <p align="center">
32+
简体中文
33+
34+
<a href="./README.md">English</a>
35+
</p> -->
36+
37+
<div align="center">
38+
<h2>
39+
关于
40+
</h2>
41+
</div>
42+
43+
编写这本书的初衷是为了让自己在学习 C++ 的过程中能够对于一些知识点有一个更深刻的记忆,同时也希望能够整理出更加系统化的 C++ 学习路线,让更多 C++ 的爱好者能够有一个良好的开始完美的结束。
44+
45+
* 本书分为四个部分
46+
* **语言核心**: C++ 的基础语法和面向对象等内容
47+
* **网络编程**: 网络通信、异步IO、Boost.Asio
48+
* **数据库**: 数据存储、数据库语句……
49+
* **图形框架**: TUI 与 GUI
50+
51+
<div align="center">
52+
<h2>
53+
在线阅读
54+
</h2>
55+
</div>
56+
57+
<p align="center">
58+
强烈推荐您通过在线网站阅读本书,以获得最佳的排版和交互体验。
59+
<br>
60+
<a href="www.demo.com"><strong>➡️ 点击这里开始阅读 ⬅️</strong></a>
61+
</p>
62+
63+
<div align="center">
64+
<h2>
65+
贡献
66+
</h2>
67+
68+
**星星之火亦可燎原**
69+
70+
一个人的能力终归是有限的,如果您愿意与我共同编撰那么这将是我们共同的成果。
71+
72+
</div>
73+
74+
### 准备环境
75+
76+
<details open>
77+
<summary><strong>Ubuntu</strong></summary>
78+
79+
```Bash
80+
python3 -m venv venv
81+
source venv/bin/activate
82+
```
83+
84+
```Bash
85+
pip install -U sphinx
86+
pip install --upgrade myst-parser
87+
pip install furo
88+
```
89+
90+
</details>
91+
92+
<details>
93+
<summary><strong>Windows</strong></summary>
94+
95+
```Bash
96+
python3 -m venv .venv
97+
.venv\Scripts\activate
98+
```
99+
100+
```Bash
101+
pip install -U sphinx
102+
pip install --upgrade myst-parser
103+
pip install furo
104+
```
105+
106+
</details>
107+
108+
### 构建预览
109+
110+
```Bash
111+
# HTML
112+
make html
113+
# PDF
114+
make latexpdf
115+
```
116+
117+
<div align="center">
118+
<p>如果您有更好的书籍名字推荐或封面推荐欢迎提交PR</p>
119+
</div>
120+
121+
<div align="center">
122+
<h2>
123+
声明
124+
</h2>
125+
126+
**本书目前是我个人编写有无数的不足指出欢迎您的指正**
127+
128+
**本书禁止在未经许可的情况下以任何形式进行盈利引流**
129+
130+
<a href="./LICENSE"><strong>➡️ 开源许可 ⬅️</strong></a>
131+
132+
</div>

make.bat

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@ECHO OFF
2+
3+
pushd %~dp0
4+
5+
REM Command file for Sphinx documentation
6+
7+
if "%SPHINXBUILD%" == "" (
8+
set SPHINXBUILD=sphinx-build
9+
)
10+
set SOURCEDIR=source
11+
set BUILDDIR=build
12+
13+
%SPHINXBUILD% >NUL 2>NUL
14+
if errorlevel 9009 (
15+
echo.
16+
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17+
echo.installed, then set the SPHINXBUILD environment variable to point
18+
echo.to the full path of the 'sphinx-build' executable. Alternatively you
19+
echo.may add the Sphinx directory to PATH.
20+
echo.
21+
echo.If you don't have Sphinx installed, grab it from
22+
echo.https://www.sphinx-doc.org/
23+
exit /b 1
24+
)
25+
26+
if "%1" == "" goto help
27+
28+
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29+
goto end
30+
31+
:help
32+
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33+
34+
:end
35+
popd

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
sphinx
2+
myst-parser
3+
furo
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# 语言介绍
2+
3+
C++的诞生源于20世纪70年代末至80年代初的编程范式变革浪潮。它旨在结合C语言的高效性与面向对象编程(OOP)的抽象能力,以应对日益复杂的系统级编程挑战。
4+
5+
## 历史起源
6+
7+
```{figure} /_static/Picture/BjarneStroustrup.jpeg
8+
:width: 256px
9+
:align: right
10+
比雅尼·斯特劳斯特鲁普
11+
```
12+
13+
C++创始人 **比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)** 在剑桥大学攻读博士期间,主攻分布式系统与仿真模拟研究,这段经历让他深刻认识到编程工具的核心痛点。
14+
15+
在此期间斯特劳斯特鲁普接触到了世界上首个面向对象编程语言 **Simula67(由 Ole-Johan Dahl 和 Kristen Nygaard 于 1967 年在挪威计算中心开发)**,它通过类和对象的概念实现了贴近现实的建模方式,极大提升了代码模块化与可重用性。但Simula67存在运行效率低、语法复杂的缺陷,无法满足系统级编程的性能要求。与此同时,他在分析UNIX内核时发现,主流语言C虽然高效灵活,却缺乏面向对象的抽象机制,难以应对大型系统的复杂性管理。
16+
17+
1979年,斯特劳斯特鲁普加入 AT&T 贝尔实验室后,开始着手解决这一矛盾。他希望创造一种兼具 C 语言高效性与面向对象表达能力的新语言。经过反复实验,他在 C 语言基础上引入面向对象特性,初步开发出 **“带类的 C”(C with Classes)**,并基于贝尔实验室的 C 编译器改造了其前端。这个早期版本的核心创新包括:引入类实现数据封装、通过继承机制实现代码复用、借助虚函数实现多态性,让语言既能支持传统过程式编程,又能进行面向对象开发。
18+
19+
1983年,随着语言特性的完善,斯特劳斯特鲁普将其正式命名为"C++"。"++"既代表 C 语言的自增操作,也象征着对原有语言能力的扩展与提升。这一命名由他的同事**Rick Mascitti** 提出。同年,他开发出首个C++编译器 **Cfront**,它是一个源代码到源代码的转换器(Source-to-Source Translator),通过将 C++ 代码转换为 C 代码,再利用现有的C编译器进行编译,解决了早期语言的编译落地问题。
20+
21+
## 发展历程
22+
23+
C++的发展始终围绕“零开销抽象”(Zero-overhead Abstraction)的核心理念,通过国际标准化进程不断完善,形成了清晰的版本迭代脉络。标准化工作由 ISO/IEC JTC1/SC22/WG21(C++标准委员会)负责。
24+
25+
**1985年**:这一年是C++发展的关键节点:Cfront 编译器 1.0 随斯特劳斯特鲁普撰写的 **《C++程序设计语言》(The C++ Programming Language)** 一同发布,这标志着 C++ 正式进入工业界应用阶段,并为语言推广提供了权威指南。
26+
27+
**1989年**:发布 Release 2.0 版本,引入多重继承、纯虚函数与抽象类等新特性,并进一步完善虚函数机制。同时,《The Annotated C++ Reference Manual》出版,为后续标准化奠定了基础。
28+
29+
**1998 年**:国际标准化组织(ISO)发布首个正式标准 **ISO/IEC 14882:1998(C++98)**,定义了核心语言与标准库框架,包含标准模板库(STL,由 Alexander Stepanov 与 Meng Lee 设计)以及修订后的 C 标准库,使 C++ 具备了稳定的跨平台能力。
30+
31+
**2003年**:推出C++03标准,以修复C++98的缺陷为主,提升不同编译器间的兼容性,仅新增"值初始化"这一语言特性。
32+
33+
**2005年**:发布技术报告TR1,虽非官方标准,但引入智能指针、哈希表、正则表达式等扩展特性,成为后续版本的重要基础。
34+
35+
**2011年**:C++11标准发布(又称C++0x),是语言发展的里程碑式升级。引入自动类型推导(auto)、右值引用与移动语义、Lambda表达式、智能指针(shared_ptr/unique_ptr)、基于范围的for循环,以及原生并发编程支持(std::thread、std::mutex 等),大幅提升语言的现代化程度与易用性。
36+
37+
**2014年**:C++14作为小型扩展版本,优化C++11的细节体验,包括泛型Lambda、函数返回类型推导、放宽constexpr函数限制等。
38+
39+
**2017年**:C++17标志着现代C++走向成熟,新增结构化绑定、if初始化语句、类模板参数推导(CTAD)、内联变量、文件系统库(<filesystem>)等特性,同时提供STL并行算法。
40+
41+
**2020年**:C++20引入革命性特性,包括替代头文件的模块(Modules)、模板约束机制(Concepts)、异步编程工具(协程)、范围库(Ranges)以及三向比较运算符(<=>)等,重塑语言的模块化与抽象能力。
42+
43+
**2023 年**:C++23 在 C++20 的基础上继续优化,推出标准库模块(`import std;`)、明确对象参数(deducing this)、新容器 `flat_map` / `flat_set`、错误处理工具 `std::expected`,以及格式化输出函数 `std::print` 等特性,进一步提升了编译效率与开发便捷性。
44+
45+
## 应用领域
46+
47+
C++ 理论上可以在任何平台或操作系统中运行这大大的增加了 C++ 所能应用到的领域。
48+
49+
- 操作系统
50+
- 目前 Windows 操作系统的部分内核和驱动程序都是有 C++ 开发的
51+
- MacOS 和 IOS 的部分内核组件
52+
- 软件开发
53+
- 在目前来看市面上大多数的桌面端软件包括客户端和服务端都是有 C++ 来完成的
54+
- 许多游戏框架和内核也皆是有 C++ 来实现的
55+
- 嵌入式开发
56+
- 医疗设备
57+
- 车机系统
58+
- 航空设备
59+
- 高性能计算
60+
- 金融
61+
- AI (例如:TensorFlow)
62+
63+
```{Mermaid}
64+
timeline
65+
title C++ 发展历程
66+
67+
1985 : 第一个商业版本 Cfront 1.0 发布
68+
: 《C++程序设计语言》第一版问世
69+
70+
1989 : Release 2.0 发布
71+
: 引入多重继承、抽象类
72+
73+
1998 : C++98 - 首个 ISO 国际标准
74+
: 正式引入标准模板库 (STL)
75+
76+
2003 : C++03 - 缺陷修复与兼容性提升
77+
78+
2005 : TR1 技术报告发布
79+
: 引入智能指针、哈希表等准标准特性
80+
81+
2011 : C++11 - "现代C++"元年的里程碑
82+
: 引入 auto, Lambda, 右值引用, 并发支持
83+
84+
2014 : C++14 - 对 C++11 的优化与完善
85+
: 引入泛型 Lambda, 返回类型推导
86+
87+
2017 : C++17 - 现代 C++ 走向成熟
88+
: 引入结构化绑定, 文件系统库, 并行算法
89+
90+
2020 : C++20 - 革命性特性引入
91+
: 引入模块 (Modules), 概念 (Concepts), 协程 (Coroutines)
92+
93+
2023 : C++23 - 持续优化与改进
94+
: 引入标准库模块 (import std;), std::expected, std::print
95+
```

0 commit comments

Comments
 (0)