Welcome to C++
介绍
本系列将带你了解C++你所需要指导的一切,我们将主要学习游戏开发中的C+。然而,并不是说只运用于游戏开发或者游戏编程,我们只是用游戏来举例子,本系列其实适用于任何人,无论你是初级还是高级,我们会设计C++的基础,但会非常简洁,所以你是初学者,你仍然可以跟着学下去。但你得能够去搜索、研究、自己去找一些基础的东西。基本上就是,自己能去谷歌你不懂的东西。我不打算在基础上细讲太久,或者极尽详细的介绍,所以你得确保自己搜索一些东西,你可以的!
所以问题来了,我为啥要学C++呢?
难道C++不是有点过时了吗?现在学C++有什么好处?其实C++仍然是当你需要写效率很高的代码时最常用的语言。或者你在写一个架构或者平台,然后你需要让代码本地运行。如果你要对硬件的直接控制,C++就是为你而生,比如游戏行业就大量运用C++,像Unity,Unreal、frostbite(寒霜)之类的游戏引擎都是用C++写的,那我们为什么要对硬件的直接控制呢?为什么这些引擎都是用C++写的,而非其他语言呢?最主要的原因就是C++能直接控制硬件。
我们来稍微讲一下C++时如何工作的?
你用C++写好代码,传入编译器(compiler),然后编译器会为你的目标平台产出机器码,机器码时你设备的CPU执行的真正指令。所以用C++我们完全可以控制你CPU执行的每一条指令。你问C++可以在什么平台运行?基本上任何平台,你只需要一个能产出那个平台的机器码的编译器即可。比如说一个x64编译器会产出x64机器码,从而在x64 CPU上运行。举个例子,包括Windows,mac,linux,其他桌面操作系统(基本上所有)都是C++开发的。移动操作系统比如IOS,Android,你也都可以用C++来写应用。以及所有的主机,XBox,PlayStation和所有任天堂的比如3ds,wii u,switch等一切主机。当你需要支持很多平台的时候,C++是非常好的选择,因为只要有一个编译器,你就可以把代码编译成能在该平台上运行本地代码。当然市面上还有其他native语言,只不过C++从80年代初就出现了,而且很流行,所有人都知道,所有人都在用它,其他语言比如C#和java不一样,因为他们在虚拟机中运行,这表示你的代码会首先被编译成一种中间语言。然后当你在目标平台运行你的应用时,虚拟机会在runtime将代码转化成机器码。C++编译器为那个平台和架构编译出机器码,就完事了,就是native的。编译出的机器码只会运行于这个平台,但这就是这个平台的机器码了,他就能够直接运行。当然,你的代码现在时native了,并不是说它一定就很快,如果你用C++写垃圾代码,一样很慢,甚至更有可能会比虚拟机语言(C#,Java)更慢。因为他们会在运行时优化很多东西,而C++不会。所以你如果写垃圾代码,C++绝对比C#和java慢。正因为此,我喜欢用那些语言比如C#只是写一些工具,或者那些不要求性能的时候,C#是一个超好的语言,但本系列是为了那些我们需要那种性能的时候,我们需要C++ ,所以我们会学到如何正确的写C++代码,如果写好代码,如何写速度快的代码。
我们会涵盖哪些内容能呢
当然,一开始我们会从基础讲起,基础的东西我会很简洁,因为我不想花太多时间在上面,如果你从来没编程过,我仍然鼓励你观看本系列,但正如我之前所说,你得学会谷歌搜索,应该会比较容易跟上,学习任何新东西其实就是多实验,所以我相信你绝对OK的,只要你有激情,以及想去学。我们还会学到如果使用库。我们会讲到C++到底是如何工作的,我们会讲内存(memory)和指针(pointer)。讲真,不知道为啥,很多教程这些东西教得不好,所以我们这次会正确的教指针和内存等东西。内存池(memeory arena),custom allocator,smart pointer(智能指针),move semantics(移动语义)等等。模板(template)以及如何正确的使用它们,如果你懂得用好templates,他们非常强大,让你的工作轻松不少,我们会讲宏(macro)以及怎么给多平台编程,我们会创建自己的数据结构,并学习如何让它们运行比std库还快,我们甚至会涉及到底层优化,比如编译器内联(compiler intrinsics)和汇编(assemblies),如果写我们自己的map和SSE。这就是所有的了,过程中我们可能还会涵盖其他的,如果你们有希望我讲的