C++ 学习建议、环境配置等#

危险

以下建议内容中所涉及的, 学习 辩证唯物论 对于学习的作用都是实践事实, 并非所谓粉红无脑爱国才有的捏造.

C++ 环境配置#

哪怕按下面列出的 Visual Studio 配置教程 (Windows 可用) 对 Visual Studio 进行额外配置, 它对于缺少分号、括号等简单错误的报错依旧非常糟糕, 因此我更建议你使用 VSCode 配置教程 (Windows/MacOS/Linux 均可用).

学习方法#

以下学习方法均参考自

在学会如何走得好看之前, 先跑起来#

小孩子学走路从来不是从走路开始的, 而是向前猛跑摔倒几次, 有了走路的整体感觉, 再慢下来对各个过程进行准确的理解.

所以建议先将 C++ 整体内容粗略过一遍再进行细节学习, 这粗略的一遍不需要解决 "C++ 如何做到什么", 只需要解决 "C++ 可以做什么". 知道了可以做什么, 便能有效地学习或提问如何去做. 例如, 你不必掌握函数递归怎么写或怎么分析, 但在这一遍中会知道 C++ 可以进行递归.

不要记忆技术细节#

"编程语言特性的存在是为了支持各种程序设计风格和技术. 因此, 编程语言的学习应该更关注掌握其固有的、内在的风格, 而不是试图了解每个语言特性的所有细节."

二进制原码和补码? 我不知道. int 的大小? 我不知道. 运算符的结合性和优先级? 我不知道.

我不知道, 因为我没必要知道. 如果实在需要知道 int 的大小 (它并不固定) 那可以去查, 如果实在不清楚运算符的结合性优先级那可以加括号. 问题在于, 知道这些细节会帮助初学者写出程序吗? 对于初学者, 更重要的是如 在学会如何走得好看之前, 先跑起来 所述建立起对编程的感性认识. 这些细节并不是学习的重点, 且 在有了总体认识后很容易补充上.

考试可能是闭卷考试, 但编程不是, 编程学习过程也不是. 在哪查找中文的 C++ 资料?

实际编程#

请阅读

明确编程能力不是靠听课听来的, 而是从实际的编程中理解掌握的.

实际的编程并不一定是刷力扣题等 (从考试的角度, 刷力扣题是偏题的; 从编程语言学习的角度, 刷力扣题是有害的), 对于新手来说可以是抄书上例题实际运行进行理解, 可以是对一些突发奇想加以实际验证, 可以是学习练习如何使用软件等等.

学习使用软件#

软件是你的朋友, 手写代码不报错不算什么能力, 能用合适的软件写代码才是能力. 例如, 建议学习:

学会这些比多刷几道力扣题提升更大.

使用最新的软件#

学习使用软件 中所说的用合适的软件还意味着 你应该用最新的软件.

如果仅仅因为考试时用的软件是 Dev-C++、VS 2010 等就在平时的学习中使用这些软件, 只会严重影响新手的学习: 它们因为过老不会为新手提供某些报错, 甚至可能没有 断点调试自动格式化 等功能.

既然有的新手所主张的 "面向考试学习" 是为了考试取得好成绩, 使用这些影响自己学习的软件岂不是本末倒置? 上文 在学会如何走得好看之前, 先跑起来 已经强调了, 新手需要在走得好看之前跑起来, 而当新手通过在 最新软件 上持之以恒地练习从而入门程序设计后, 熟悉考试软件只需要一两天时间.

此外, 哪怕按 Visual Studio 配置教程 (Windows 可用) 对 Visual Studio 进行额外配置, 它对于缺少分号、括号等简单错误的报错依旧非常糟糕, 我更建议你使用 VSCode 配置教程 (Windows/MacOS/Linux 均可用).

不要通过询问人工智能大模型学习#

人工智能大模型如 chatgpt 等不存在同理心, 主观上并不知道什么代码是好的, 什么代码是适合初学者的等等. 因此, 询问它所获得的建议往往会影响你的学习. 我基本一直在群里, 如果有问题, 请尝试询问我解决.

如果实在需要使用人工智能大模型, 请在提问时加上:

当然你也可以在配置 VSCode 后切换为使用 Cursor 这个 ai 编辑器.

更多学习方法#

更多学习方法请直接阅读 天鹅书第二版第 0 章.读者须知 和《毛主席论教育革命》.

非应试自学学习路径#

学习路径分为 非应试自学学习路径应试教育学习路径. 非应试入门其实更为简单, 并且如果已经非应试入门, 补全应试知识点不过是一两天的事.

应试教育学习路径#

我个人完全不推荐应试教育学习路径, 它只会教一些 C++ 语法, 不会教程序设计的思路、方法、原理或技术. 当我说学 C++ 时, 从来都是包括设计哲学、最佳实践、设计模式、惯用法、工具链使用等在内, 这些综合起来才是 C++.

如果你只是想考试拿高分, 那么 非应试自学学习路径 更简单、更适合你. 如果还有疑虑, 请再阅读上方的学习方法, 并请尝试阅读:

这里还保留应试教育学习路径, 仅仅是为了告诉你我了解它们, 知道它们有多么糟糕.

网课参考#

教材参考#

看书记得看前言! 看书记得看前言! 看书记得看前言!

《C++ Primer Plus》

矮子里的高个, 我针对应试唯一推荐的书, 看书一个月左右即可速通 C++ 上下册所有内容 (如果感觉看书有难度, 可以先看一部分上面的网课领会).

《C++ 程序设计实践教程(机械工业出版社)》

部分非电类专业 C++ 用的教材, 虽然不怎么好, 但写得比《C++ 大学教程》清晰地多. 如果不想新买书, 可以考虑用这本.

但还是有非常非常糟糕的部分, 比如将内置类型和用户自定义类型割裂开来, 明明用户自定义类型的传参等跟内置类型没有区别, 却进行强行解释, 完全不符合 C++ 的设计原则——为用户自定义类型提供与内置类型同等的支持.

《C++ How to Program, 9th Edition》(《C++ 大学教程(第9版)》)

电类 C++ 用的教材, 但 个人 完全不推荐, ACCU 给出最低分的垃圾书. 简单列一些问题:

  • 使用 for (int i = 1; i <= 5; ++i) 而不是更符合语言习惯的 for (int i = 0; i < 5; ++i).

  • 使用 explicit 而不解释为什么, 而且使用方法完全错误.

  • 第一次写构造函数时就用了成员初始化列表且没给出合理解释, 让人以为构造函数不能作为正常函数看待.

  • 第一次用 std::sort 算法时没有任何解释, 几百页后才解释 std::sort 到底怎么用.

  • ……

《C++ 程序设计(朱金付主编)》

快跑!!! 简单列一些问题:

  • 展示拷贝构造函数和拷贝赋值函数时, 参数使用 &, 实际应该使用 const&.

  • 解释链表时使用有序链表, 导致读者连怎么插入删除都搞不懂.

  • ……

习题参考#

《C++ Primer Plus》课后习题

主要是语法的练习. github 上可找到别人完成的版本作为解答的参考.

C++ 资料查询#

C++ 术语不全书#

这一个应该足够了, 遇到不理解的再去查就行, 没必要全部记忆. 其余术语网站可以在 我的 C++ 浏览器书签 (2024/08/30) (右键另存为再导入到浏览器) 中找到.