# :ghost: C++的神话和传说

## :question: C++已死，无法使用它编写任何东西

C++并没有死。

事实上，在各种排名中，如[Tiobe](https://www.tiobe.com/tiobe-index/)指数等，它一直位居最受欢迎的编程语言之列。关于 C++是“死亡语言”的看法出现在 21 世纪初期，当时该语言标准化委员会处于不活跃状态。然而，自从 C++11 标准以来每三年就会添加新功能和功能性，并且有了复苏。尽管如此，仍有人坚持认为 C ++是一种难以掌握和存在问题的语言的神话和传说，这往往是因为他们没有跟上这门语言发展或只接触过少量教育内容。

## :question: 真正的程序员使用Linux/Vim/gcc学习C++

如果您对所提到的组合不熟悉，则建议首先专注于学习 C ++基础知识。建议使用 Microsoft Visual Studio IDE 开发您的第一个应用程序。有关更多信息，请参见[PreJunior Books](Books/PreJunior.md)。

走具有挑战性的道路可能看起来很酷，但创建一个使用 Linux、Vim 和 GCC 创建“Hello World”程序所需信息量非常大，并且可能导致早期挫败感并对整个编程产生幻灭感。试着遵循从简单到逐渐增加复杂度的路径。就像新手在第一次锻炼时不应该试图举起最重的重量一样，在学习中也适用同样规则。一旦你熟悉了这门语言，就可以尝试使用 Linux 进行开发。但那完全是另外一个故事...

## :question: 在学习 C++之前最好先掌握 C/汇编语言等

不，不是这样的！

这种说法存在两种普遍情况：过去大学里教授 C++就是这么做的，而“老一辈”的成员也经历了类似的道路。现代 C++并不需要如此具有挑战性的方法。该语言自给自足，可以在没有任何背景知识的情况下学习。更可能的是通过“从 C 到 C ++”的方式来学习 C ++ 会导致混淆和想要以“带类”的方式编写 C ++。

## :question: 使用 Stroustrup 所著书籍来学习 C++

一个极其有害的声明，源于那些手中拿着键盘出生或者对其他语言（例如 C、Fortran、Delphi 等）有丰富开发经验然后转向 C++ 的人。

这条建议很可能是由那些在开发其他语言方面拥有丰富经验（如 C、Fortran、Delphi 等）然后转向使用 C ++ 的人提出来的。Stroustrup 写了《The C++ Programming Language》作为参考书，因此必须以适当方式使用它，并需要一定程度上对该语言进行了解。相反，在[Books](Books/Overview.md)部分查找更好，在那里您将找到适用于所有级别语言熟练度水平的书籍。

## :question: 只使用标准学习 C++

另一个自命不凡的说法。

现代 C++ 标准超过 2000 页，需要付费才能获得最新版本，并且不是以用户友好的方式组成。虽然对于那些使用其标准学习语言的人值得称赞，但并不建议大多数人采用这种方式进行学习。相反，最好查看 [Books](Books/Overview.md) 部分，在那里您会找到适合各种语言熟练程度的书籍。

## :question: 未定义行为困扰着开发者

更可能是否定而非肯定。

现代 C++ 和围绕该语言出现的工具可以避免与未定义行为相关的大部分问题。我们可以给出一个简单的建议：当不确定特定结构体执行什么操作时，请在 [CppReference](https://en.cppreference.com)、[StackOverflow](https://stackoverflow.com/) 或其他专门资源上阅读有关它们的信息。如果阅读后仍然存在疑问，请尝试以更简单的方式重写代码以避免未定义行为。简洁中蕴含巨大力量。

## :question: 需要手动管理内存，该语言没有垃圾回收机制

这是来自“老卫士”的另一个城市传说，他们在 C++11 之前停止编写 C++ 或者只是浅显地在大学里学了一下，并忽略了最新标准。现代 C++ 在其标准库中拥有一组原始类型负责自动内存分配和释放。手动内存管理已经被淘汰了。许多团队和公司甚至有规则：“禁止使用裸指针”。再次强调，不要忽视现代工具和检查器，因为它们可以在源代码级别检测到可能存在内存泄漏。

## :question: C++ 只属于旧技术领域

部分正确，但值得注意的是这并不仅适用于 C ++ 。任何语言中代码质量主要取决于团队及其先驱者所处技术文化水平而非单纯依靠编程语言本身。由于诸如开发人员技能水平、职业道德和错误估计等人类因素导致产生了大量旧版代码。如今，许多项目都采用 C ++ 编写，并且已经连续运作数年，是公司收入来源 的基础。在这种情况下，在短时间内进行任何重大变更都很危险。开发人员在进行更改时会格外小心以避免任何退步。然而，不要认为处理旧项目不能帮助您提高技能水平。实际上，这些项目可能提供挑战性任务 , 帮助你积累从代码阅读、反向工程、测试、软件架构设计、自动化到需求收集等方面获取丰富经验。

---

[**返回首页**](README.md)