仅仅为了使用STL容器而使用C++,这是一种不好的做法吗?

5

首先简单介绍一下背景...

在接下来的内容中,我会使用C、C++和Java进行编码(通用算法),而不是带有界面的GUI和花哨程序。我开始学习Java编程,对Java掌握得相当不错,也经常使用Java容器,因为它们往往可以减少繁琐的记账工作,同时保证性能。我间歇性地使用C++,但是我显然没有Java那么好,感觉很笨重。我不太了解C++,没办法不查找每一个函数就能在其中工作,所以我很快又回到了尽可能多地使用Java。

然后我突然转向汇编语言的破解和黑客活动,因为我觉得我太过关注高级语言,需要更多地了解CPU与内存的交互以及1和0的实际情况。我必须承认,这是我迄今为止最具教育意义和有趣的计算机体验之一。

由于明显的原因,我不能每天都使用汇编语言进行编码,它主要是为了娱乐。通过这种体验,我了解到C++比Java更接近“1和0的层次”,但我仍然觉得它非常晦涩,就像一个瑞士军刀一样,有太多的小工具来完成任何一个任务。我决定尝试使用纯C语言,并且很快就爱上了它。它是简单和足够“微观管理”的完美结合,以不抽象实际情况为主。然而,我在Java中错过了一件事情:容器。特别是一个简单的容器(如stl向量),可以动态扩展大小,非常有用,但是每次都要在C中实现它,相当麻烦。因此,我的代码目前几乎完全是C,加入了C++的容器,只使用了C++的这个特性。

我想知道,在实践中只使用C++的一个特性,而忽略其他特性,转而使用C类型的代码,这是否被认为是可行的呢?


4
C++非常适合作为C语言的升级版! - John Knoeller
2
没问题。但是在使用STL时,你不能忽略复制构造函数和赋值运算符。否则会引发一些意外情况。 - Hans Passant
4个回答

14

简短回答是:“这不是使用C++最有效的方法。”

当正确使用时,强类型系统、传递引用的能力和RAII等惯用法可以使C++程序更加正确、易读和易于维护。

没有人能够阻止您按照自己的方式使用语言。但是,如果您不学习和利用实际的C++功能,可能会限制自己。

如果您编写的代码需要其他人阅读和维护,他们可能会欣赏“真正的C++”,而不是“类C语言”(引用之前评论者的话)。


我同意,封装和类不变式提供了一种令人难以置信的方式来推理程序的复杂性。必须显式初始化和释放的“struct”容易引发错误。 - Matthieu M.

7

对我来说看起来很好。这也是我真正使用的C++的唯一部分。


有趣!所以我不是唯一一个这样的人? - ldog
7
将C++简单地变成“带类的C语言”是远远不能发挥其更好的作用的。 - Ignacio Vazquez-Abrams

4

我正在编写一个数字计算器。其中没有多态、控制委托和交互。 <iostream> 是瓶颈,所以我用 C 重写了输入/输出。

这些函数大多数在一个表示工作线程的类中。因此,这不是很面向对象,而是具有线程局部变量。

除了使用vector,我还相当大量地使用<algorithms>。但是重型数据结构是用纯C编写的。主要是循环单向链表,甚至不能容易地具有不同的begin()end(),这意味着不仅容器而且序列(和for循环)是受限制的。然后模板帮助预处理器生成主要内部循环。

解决您问题的最自然方法可能就是正确的方法。您不想要问题的解决方案。学习使用C++是好的,但面向对象适用于某些问题而不适用于其他问题。

另一方面,在C++程序中使用stdlib.h中的bsearch是错误的。


4

你应该以最符合自己的方式使用C++。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接