我多年前第一次学习C ++,两次阅读Stroustrup的“The C ++ Programming Language”,并在相当大的项目中参与了一年(尽管c ++团队的水平相当低)。创始人的书中的C ++实际上是一个很好的旧C的强大扩展。强大和面向对象,甚至是通用的,但仍然是 - 扩展。并且,是的,STL以某种方式通过标准添加到语言中,只是存在一些隐藏的原因 - 无论您是否要使用它。所以,那时候我对C ++没有太多好感:除了所有这些永恒的C内存问题,指针和数组的边界还有很多新增加的:使用类和模板以及复杂的语法和很多想要解决它。
现在,经过多年远离C ++,我最近开始刷新我的知识,但现在我想起了Andrew Koenig和Barbara E. Moo的“Accelerated C ++”。而我所看到的绝对是“另一个C ++”!在本书之后,你实际上可以使用C ++几乎不知道它的C-core:你永远不能使用数组,因为你有向量,你可以忘记char *,因为你有字符串等等。从这一点来看看来,STL实际上是语言的核心,语言本身似乎是一个非常“高级”的语言,但它具有对Java和Python都无法承受的实体的性能和控制。
那么,你在练习中使用什么C ++?你混合样式,比如数组和向量吗?这里有规则或最佳做法吗?...
更新:
我在评论中被告知,我正在谈论的是现在所谓的“现代C ++”。通过这个词搜索带来了以下非常有趣的主题:
答案 0 :(得分:7)
恭喜,您已经发现了我们所谓的“Modern C ++”。我更喜欢它在“C with classes”编程风格上的任何一天。没有更多的原始指针,没有更明确的删除等。精彩的世界!
答案 1 :(得分:4)
一直打字和模板元编程。我没有那么多地使用多态,因为它太多锁定了。
顺便说一句,Boost库是STL的巨大补充。
答案 2 :(得分:4)
我尽可能使用泛型编程和RAII。我很想念非C ++中的两种语言 - 现代语言。
答案 3 :(得分:4)
那么,你在练习中使用什么C ++?你混合样式,比如数组和向量吗?这里有规则或最佳做法吗?...
现代C ++,绝对是。但在我看来,这并不完全排除数组。仍然存在阵列优于矢量的情况。但是当我使用数组时,我会以STL方式使用它们。我使用指针作为迭代器,并将STL算法应用于数组的内容,依此类推。
顺便说一句,Bjarne Stroustrup本人被引用来描述C ++的方式与描述自己的方式非常类似:
在C ++中,有一种更小,更清晰的语言难以脱身
当然,也有局限性。使用现代C ++,编译时间往往会受到影响。它需要更高级的编译器,在某些平台上使它成为一个禁忌。许多更保守的主要开发人员或项目经理,或者只是古老的代码库,有时也意味着它也不是一种选择。并且存在一定的学习曲线,因为C的所有陷阱仍然存在,你只需要学会绕过它们(例如,内存泄漏不只是消失,现代C ++只是定义一些非常强大的模式可以避免它们。)
但我认为现代C ++真的可以被认为是一种美丽的语言。而这绝对不是你如何描述传统的“C-with-classes”风格的C ++。
当我使用(其他)高级语言时,我发现C ++中几乎总有一些东西。要么语言错过了健壮的和类型安全的容器或富有表现力的迭代器/算法,要么它缺乏对RAII的支持,或者它无法表达通用算法,就像模板一样。
这些语言肯定也有它们的优点,并且无可争议的领域它们比C ++更好。但我通常也发现它们有明显的缺点,我只是无法表达我的想法以及我在C ++中可以做到的。我必须跳过篮球,牺牲类型安全,依靠反射或其他任何东西,只是为了做一些C ++会“自然地”支持的东西。
答案 4 :(得分:3)
Koenig和Moo的Accelerated C ++是一本非常好的书,也是我推荐的书。
我认为合适的数组和向量。对于没有动态改变的东西,我仍然使用数组,否则我会使用向量。
了解两者都很重要。
答案 5 :(得分:0)
绝对混合风格。不必要地限制自己似乎很愚蠢,特别是有这么多选择。
答案 6 :(得分:-2)
C++11 赢得你所有的战斗..相信我..
答案 7 :(得分:-7)
作为一个替代答案,我很想说使用C ++的最佳做法是不这样做。
如果你只是Windows,而.Net不是太大,那么C#是一个很好的选择。在Unix上,Java很棒。
当然C ++占有一席之地。它只是一个比我以前更小的地方。
编辑:我有超过30年的编程经验。大会5年,C语言17年,C ++ 5年,Java 3年,现在C#2年。我非常擅长这些。汇编程序很棒。我用它编程很快。但我更喜欢C而不是汇编程序。同样,我更喜欢C#而不是C ++。我发现在C#中比在C ++中使用大多数常见应用程序要容易得多。