我知道C/C++包含可以为开发人员提供一些函数的库,例如创建向量。 Boost库类似于此,但是,我想编写自己的代码,也许为我的工作创建自己的库。
但是这可能吗?如果我为C/C++编写了自己的头文件,几乎像iostream.h文件一样,只是我自己制作了它,并进行了优化,那么它对我的应用程序/项目有益吗,还是应该使用编程语言中包含的标准库?
我的回答至少部分地以一种修辞问题的形式呈现:
你也打算写自己的编译器吗?
你总是在使用别人编写的东西,对于通用用途来说,这是非常好的事情。为什么呢?因为他们是他们领域的专家,因为他们是多个人,因为他们的代码经过了数十年严格的同行评审,被数百万人进行了彻底的测试,并进行了许多改进版本的迭代。
抵触这种本能是一回事,但由于这个原因拒绝使用标准头文件则是完全不同的事情, 特别是当你如此武断地划定界限时†。
简而言之,C++标准定义标准库并且你的编译器供应商会提供其实现,这有非常充分的理由。我强烈建议你遵循这个原则。
†…这就是为什么我的观点不是“滑坡”论证!
当然你应该使用标准库。不这样做的唯一原因是:
你对“所有东西都应该由自己制作”的想法并不罕见,但一旦你实现了其中一种标准类型,并花费了数小时,而你的实际项目还没有进展一行,当你的新“自己”的类型仍然缺少一半的功能时,那么你会意识到使用现有库(特别是标准库或其他知名库,如boost)可能是明智的选择。
这使得它看起来不像是我的代码,而是我在使用别人的代码。
你会如何编写 <fstream>
库?打开文件并不是纯 C++ 语言能够完成的事情,需要一个提供此功能的库。从根本上讲,打开文件必须由操作系统完成,并且操作系统将其暴露给您的代码。操作系统本身必须处理其他软件,以使其能够执行这些操作。
还有这个问题:加法并非通过魔法发生,因此必须有人为您的程序明确说明如何执行 a + b
。编写 a + b
会让您感觉好像在使用其他人的代码,描述 CPU 上如何实现加法指令的代码?
没有一款软件可以做到万能。每个软件都必须与其他组件进行交互,几乎总会有一些其他组件是其他人的作品。您应该习惯于这样一个想法:您的软件有自己的责任范围,并且将依赖于其他人来处理其他事情。
当一个人重新实现大多数标准例程时,他可能会想要创建一种新的语言。这就是为什么我们有许多选择的语言。人们已经想出了更好的想法。重新发明轮子是好的——我们现在不再使用战车轮胎。
C和C++可能不是最好的,但是它们有40年的历史,具有持久力(和很多包袱)。因此,如果您要使用某种语言进行编程,请使用其资源,利用其优点和缺点。很可能,您的解决方案不会比已经改进了成千上万个其他库的现有库更好。
但是谁知道——您的代码也许会更好。