izh*_*hak 17 c++ stl coding-style
几年前我第一次学习C++是通过阅读Stroustrup的"C++编程语言"两次,并在一个相当大的项目中参与了一年(尽管c ++团队的水平相当低).创始人的书中的C++实际上是一个很好的旧C的强大扩展.强大和面向对象,甚至是通用的,但仍然是 - 扩展.并且,是的,STL以某种方式通过标准添加到语言中,只是存在一些隐藏的原因 - 无论您是否要使用它.所以,那时候我对C++没有太多好感:除了所有这些永恒的C内存问题,指针和数组的边界还有很多新增加的:使用类和模板以及复杂的语法和很多想要解决它.
现在,经过多年远离C++,我最近开始刷新我的知识,但现在我想起了Andrew Koenig和Barbara E. Moo的"Accelerated C++".而我所看到的绝对是"另一个C++"!在本书之后,你实际上可以使用C++几乎不知道它的C-core:你永远不能使用数组,因为你有矢量,你可以忘记char*,因为你有字符串等等.从这一点来看看来,STL实际上是语言的核心,语言本身似乎是一个非常"高级"的语言,但它具有对Java和Python都无法承受的实体的性能和控制.
那么,你在练习中使用什么C++?你混合样式,比如数组和向量吗?这里有规则或最佳做法吗?...
更新:
我在评论中被告知,我正在谈论的是现在所谓的"现代C++".通过这个词搜索带来以下真正有趣的线程:
恭喜,您已经发现了我们所谓的"Modern C++".我更喜欢它在"C with classes"编程风格上的任何一天.没有更多的原始指针,没有更明确的删除等.精彩的世界!
那么,您在实践中使用什么 C++ 呢?您是否混合使用数组和向量等样式?这里有什么规则或最佳实践吗?...
当然是现代 C++。但在我看来,这并不完全排除数组。仍然存在数组优于向量的情况。但当我确实使用数组时,我会以 STL 类型的方式使用它们。我使用指针作为迭代器,并将 STL 算法应用于数组的内容,等等。
顺便说一句,Bjarne Stroustrup 本人对 C++ 的描述方式与您自己的描述方式非常相似:
在 C++ 中,有一种更小、更简洁的语言正在努力摆脱困境
当然,也有局限性。对于现代 C++,编译时间往往会受到影响。而且它需要更高级的编译器,这在某些平台上是不可能的。许多更保守的首席开发人员或项目经理,或者只是古老的代码库有时意味着它也不是一个选择。并且有一定的学习曲线,因为 C 的所有陷阱仍然存在,你只需要学会绕过它们(例如,内存泄漏不会消失,现代 C++ 只是定义了一些非常强大的模式来避免它们) )。
但我认为现代 C++ 确实可以被认为是一门美丽的语言。这绝对不是您描述传统“C-with-classes”风格 C++ 的方式。
当我使用(其他)高级语言时,我发现几乎总是缺少 C++ 的某些东西。要么该语言缺少健壮且类型安全的容器或富有表现力的迭代器/算法,要么缺乏对 RAII 的支持,要么它无法像使用模板那样表达通用算法。
这些语言肯定也有它们的优势,并且毫无争议地在某些领域它们比 C++ 更好。但我通常也发现它们有明显的缺点,我无法像在 C++ 中那样表达我的想法。我必须跳过重重困难,牺牲类型安全,依赖反射或其他任何东西,只是为了做一些 C++ “自然”支持的事情。
归档时间: |
|
查看次数: |
2843 次 |
最近记录: |