前言
随着学习的深入,C++ 的学习越来越迫在眉睫。
虽然我在学习 Maya API 以及 Unreal 过程中已经写过不少的 C++ 代码。
但以前写 C++ 都是用 Python 的经验迁移过去使用的,很多 C++ 的特性都不懂,很多库也不怎么会用。
所以正因为如此,才希望自己可以深入学习好 C++
课程推荐
C++ MasterClass
在 youtube 上找到了一个非常棒的教程
Youtube地址(不完整): https://www.youtube.com/watch?v=8jLOx1hD3_o
udemy 完整版地址: https://www.udemy.com/course/the-modern-cpp-20-masterclass/
B站
https://www.bilibili.com/video/BV1Hr4y1H7wB
https://www.bilibili.com/video/BV1JY4y1Y7uZ
https://www.bilibili.com/video/BV1iA4y1X76r
https://www.bilibili.com/video/BV1A34y1e7KS
https://www.bilibili.com/video/BV1434y1e7N4
Github地址: https://github.com/rutura/The-C-20-Masterclass-Source-Code
教程足足有 30 小时长,而且还是 udemy 教程的阉割版本,不过里面有第一章会教导如何使用
MSVC
gcc
clang
三种 C++ 编译器构建环境。
我 fork 了他的仓库加上我自己的 VSCode 配置 仓库地址: https://github.com/FXTD-ODYSSEY/The-C-20-Masterclass-Source-Code
默认 tasks 是配置了三中不同编译的选项,如果注释掉两个的话,那就可以直接在 VScode 实现 ctrl+shift+b 实现编译并运行。
教程里面主要 IDE 环境是使用 VScode 搭建的,可能会有人困惑,why not VS。
我很久以前开发 Maya C++ 就是使用 VS 进行开发的,说实话,IDE 隐藏了太多细节,一旦出错,反而是无头苍蝇,无从查起。 知乎回答
当然也同其他回答说得也对,用什么工具都无所谓,关键是懂得 C++ 的整个编译流程。
The Cherno C++
https://www.youtube.com/watch?v=18c3MTX0PK0&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb
https://www.bilibili.com/video/BV1gk4y1r7UH
游戏开发大佬推出的一系列编程课程。
parallel 101
后来非常偶然地,我翻到一个大佬 (小彭老师) 的课程
https://github.com/parallel101/course
https://www.bilibili.com/video/BV1fa411r7zp
这个课程用直播和录播的形式详细介绍了从 cmake 到 C++ 的使用。
而且老师年轻有为,能力很强,经验丰富。
原子之声
C++现代实用教程(一):基础主线(VSCODE) gitlab地址
C++现代实用教程(二):面向对象基础 gitlab地址
C++现代实用教程(三):面向对象之友元与继承 gitlab地址
C++现代实用教程(四):面向对象核心多态 gitlab地址
C++现代实用教程:智能指针 gitlab地址
C++现代实用教程: Namespace命名空间 gitlab地址
这位老师也很赞~
但是还没仔细看…
C++ 道法器术
https://www.bilibili.com/video/BV1pu411y7n1
https://www.bilibili.com/video/BV1RV4y1x7qH
C++ 是一门很复杂的语言,像我是从 Python 开始进阶编程的。
当我将 Python 很多用法摸透之后,进入到 Python 底层,发现 C++ 还很多底层的内容等待我去学习(:з」∠)
那上面的视频,比较系统地总结了 C++ 从入门到进阶的各个不同阶段地内容,学习 C++ 有很清晰的整体图谱。
当然视频里面其实是介绍作者推出的课程的~
个人剖析文章 01_C++ 道法器术.md
搭建运行环境
C++ 语言和 Python 运行方式有相当大的不同,
参考: https://smartkeyerror.com/Python-Virtual-Machine
编译 C++ 需要有 C++ 编译器来生成汇编代码(二进制机器码) ,不同的编译器有不同的优化策略,所以版本和编译器平台都会对生成的汇编有很大影响。
教程提供了 https://en.cppreference.com/w/cpp/compiler_support 这个网站。
可以看到不同平台编译器对各种 CPP 规范的支持情况,如果用了老版本就不能使用新版本的 C++ 写法
目前 C++ 也在不断演进,从古老的 C++98 到现在 C++11 C++14 C++17 C++20 以及后续即将推出的 C++23 C++26
目前主流编译器的最新版本都支持到 C++17 了。
编译器下载配置
市面上最主流的 C++ 编译器有
MSVC
gcc
clang
,其中MSVC
是 windows 平台的,另外两个是可跨平台开发。
windows 下如何安装环境呢? 推荐使用 choco 进行安装
1 | Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) |
用管理员权限打开 powershell 然后输入上面的命令进行安装。
1 | ::安装 MSVC |
执行上面的命令可以安装相对应的环境到系统中。
需要注意的是 MSVC 需要打开 VS installer 配置 windows SDKC:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe
然后选择下载 Windows 10 SDK 再到右下角点击修改。
这样才能将 MSVC 编译器安装到电脑上。
使用 MSVC 进行编译,需要调用
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat
脚本启动环境。
激活环境之后可以使用 cl.exe 来接链编译 C++ 代码。
而其他编译器默认安装完之后 choco 添加到 PATH 路径下了。
1 | C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat |
1 | g++ -g -std=c++20 main.exe main.cpp |
1 | clang -g -std=c++20 main.exe main.cpp |
使用上面的命令就可以实现 C++20 标准代码的编译。
如果你使用 Visual Studio 之类的 IDE,那背后其实也是调用编译器对 C++ 代码编译生成二进制机器码文件。
VScode 环境配置
有了上述的环境之后,只要运行命令就可以执行代码了。
开发工具比较推荐使用 VScode
个人体验了 VS 感觉过于笨重,而且隐藏了很多编译的细节,导致很多环节出错了不知道从何查起。
所以我推荐使用 VScode 编辑器作为入门,了解了基础再使用复杂的 IDE 才能事半功倍。
安装 VScode 之后,可以安装微软官方提供的 C++ 扩展
实际上 VScode 官方是比较推荐用tasks.json
配置来管理编译 用launch.json
来管理启动的。
但是这些配置对小白来说还是稍显复杂。
这里我推荐安装 Code Runner 插件
去到对应的代码就有启动图标,在右上角,点击一下默认会调用 gcc 编译并执行。
如果想要修改默认的执行命令,可以去修改 code runner 的配置
默认会有不同语言对应执行的命令,我们这里可以把 Cpp 执行的命令改成我们想要的样子即可。
比如我们想要改成 clang 编译也或者 MSVC 编译也是完全可以的。
MSVC 比较麻烦,需要先跑VsDevCmd.bat
激活环境才能使用 cl 命令。
另外输入源可以改成通配符识别
*.cpp
,这样多个文件只要都在一个目录里面都会一同编译,方便我们初学跑程序。
1 | "cpp": "cd $dir && g++ -g -std=c++20 *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt", |
另外在线网站 https://godbolt.org/ 内置了很多不用语言的编译器
可以在线编写代码去验证,也能很方便地查看编译出来的汇编语言。
没有本地环境的时候也可以用这个工具来跑代码进行验证。
C++ 入门
学习一门语言,是骡子是马总得遛 一遛才知道代码是否有问题。
所以只是看教程,脑内编译代码是不行的。
这里我用 C++ 入门会以 The-C-20-Masterclass-Source-Code
只要按照我上面的配置,就可以愉快地跑这个仓库任意路径的代码,并编译出可执行文件了~
如果你已经有编程基础,比如学过其他的编程语言,那么我更推荐直接看代码执行来学习,遇到不懂的部分再翻视频。
这样比起纯看看视频会更快上手。
另外为了方便能够查阅 cppreference.com cplusplus.com 等官方文档,可以快速跑里面的案例 Demo
我用 Python 做了个简单的爬虫,将不同的资料汇总到一起 REPO