在尝试学习C / C ++时,我总是觉得令人沮丧的是我需要使用头文件。它使它看起来不是我的代码,但我正在使用其他人的代码。我只是希望它是纯粹的,并且在不使用头文件的情况下由我自己编写。
我确信C / C ++包含的库可以为开发人员提供一些功能,以便创建一个向量。 Boost库与此类似,但同样,我想编写自己的代码,并为我的工作创建自己的库。
但这可能吗?如果我为C / C ++写了我自己的头文件,几乎就像iostream.h文件一样,只有我自己做了,并对其进行了优化,这对我的应用程序/项目是否有益,或者我应该只使用编程语言中包含的标准库吗?
答案 0 :(得分:14)
我的回答至少部分是以修辞问题的形式出现的:
您是否也要编写自己的编译器?
你总是使用别人写的东西,而且对于一般用途来说,这是一件非常非常好的事情。为什么?因为他们是他们领域的专家,因为他们是多人,并且因为他们的代码经历了数十年的严格同行评审,数百万人的全面测试,以及许多改进版本的迭代。
作为一种本能回避这一点是一回事,但是refusing to use standard headers due to it is quite another,尤其是当你如此划线†时。
简而言之,C ++标准定义标准库以及为什么您的编译器供应商提供了它的实现,这是一个很好的理由。我强烈建议你按照这个原则行事。
† ...这就是为什么我的不是&#34;滑坡&#34;参数<!/子>
答案 1 :(得分:4)
当然,您应该使用标准库。不这样做的唯一原因是:
您对“一切都应该由您自己制作”的想法并不少见,但是一旦您实施了其中一种标准类型并花费了数小时,而您的实际项目没有进展到一行,那么您的新“自己的”类型仍然错过了一半的功能 - 然后你会发现使用现有的库(特别是标准库或众所周知的其他类似boost)可能实际上是一个聪明的东西。
答案 2 :(得分:2)
它似乎不是我的代码,而是我使用其他人的代码。
您如何撰写<fstream>
图书馆?打开文件不是可以用纯C ++语言完成的。需要提供该功能的库。在基础上,打开文件必须由操作系统完成,操作系统会将其暴露给您的代码。操作系统本身必须处理其他软件,使其能够做这些事情。
或者是这样的:加法不是通过魔法发生的,所以有人必须详细说明如何为你的程序做a + b
。写a + b
会让您觉得您正在使用其他人的代码,该代码描述了如何在CPU上实现添加指令吗?
没有一件软件可以做任何事情。每个软件都必须与其他组件进行交互,而且其他组件中的一些组件实际上也是其他组件的结果。你应该习惯于你的软件有自己的责任范围,并依赖其他人来处理其他事情。
答案 3 :(得分:1)
重新发明轮子是一个坏主意。特别是如果那个轮子是由比你更聪明,更有知识的人设计和制造的,并且对于试图制造汽车的其他人都知道(程序C ++)。
使用标题;不要愚蠢。
答案 4 :(得分:0)
当重新实现大多数标准例程时,人们不妨创建一种新语言。这就是为什么我们有多种语言可供选择。人们梦想着一个更好的主意。重新发明轮子是好的 - 这些天我们不会驾驶战车。
C和C ++可能不是最伟大的,但有40年的历史,他们确实拥有掌控权(和许多行李)。因此,如果您打算使用某种语言进行编程 - 请利用其资源,优势和劣势。机会要大得多,你的解决方案也不会比现有的库提高1000多个其他库更好。但谁知道 - 你的代码可能更好。