31 | 编程范式:泛型编程
陈皓
该思维导图由 AI 生成,仅供参考
你好,我是陈皓,网名左耳朵耗子。
在上节课,我从 C 语言开始说起,聊了聊面向过程式的编程范式,相信从代码的角度你对这类型的语言已经有了一些理解。作为一门高级语言,C 语言绝对是编程语言历史发展中的一个重要里程碑,但随着认知的升级,面向过程的 C 语言已经无法满足更高层次的编程的需要。于是,C++ 出现了。
C++ 语言
1980 年,AT&T 贝尔实验室的 Bjarne Stroustrup 创建的 C++ 语言横空出世,它既可以全面兼容 C 语言,又巧妙揉合了一些面向对象的编程理念。现在来看,不得不佩服 Stroustrup 的魄力。在这里,我也向你推荐一本书,书名是《C++ 语言的设计和演化》。
这本书系统介绍了 C++ 诞生的背景以及初衷,书的作者就是Stroustrup本人,所以你可以非常详细地从语言创建者的角度了解他的设计思路和创新之旅。当然,就是在今天,C++ 这门语言也还有很多争议,这里我不细说。如果你感兴趣的话,可以看看我几年前在酷壳上发表的文章《C++ 的坑真的多吗?》。
从语言角度来说,实际上早期 C++ 的许多工作是对 C 的强化和净化,并把完全兼容 C 作为强制性要求(这也是 C++ 复杂晦涩的原因,这点 Java 就干得比 C++ 彻底得多)。在 C89、C99 这两个 C 语言的标准中,有许多改进都是从 C++ 中引进的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
C++泛型编程是一门支持多种编程范式的语言,通过类、模板和虚函数等技术解决了C语言中的泛型编程问题。本文从C语言的`search()`函数出发,对比了C语言和C++的泛型编程示例,展示了C++如何通过模板技术和迭代器来实现泛型设计。文章介绍了C++中的`sum()`函数,指出了在泛型设计中可能出现的类型假设问题,并提出了解决方案。通过示例,读者可以了解C++泛型编程的特点和优势,以及如何利用C++的特性实现泛型算法和数据结构操作。文章还探讨了更高维度的抽象,引入了函数式编程的概念,展示了如何使用`reduce`函数来实现更通用的算法。通过深入浅出的讲解,读者可以更深刻地了解C++泛型编程的原理和方法,以及在静态类型语言中解决泛型编程问题的技术和方法。整体而言,本文内容丰富,适合对C++泛型编程感兴趣的读者阅读。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》,新⼈⾸单¥98
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(47)
- 最新
- 精选
- JK.Ryan写的很赞👍🏾,感觉也可以顺带讲一下Go的接口,对比多语言可以更加突出“范式”:)
作者回复: 后面会有的
2018-01-113 - okokabcd版本一: 电影(男主,女主) { 男主杀死了女主 } 版本二: 电影(男主,女主,情节(A,B){A爱上了B}){ 情节(男主,女主) }2018-02-14180
- 昵称《STL源码解析》,《inside c++model》,记得当时啃这两本时经常要感叹怎么设计的这么精妙,了解内部实现方式后,在使用的时候也更加心里有底2018-04-1220
- 闫飞泛型技术是静态系统所独有的特性,本质上我觉得还是为了兼顾执行效率和编程灵活性,实现零成本抽象这一刀尖上跳舞的巨大挑战。 较新的语言标准还提炼了很多基础设施,比如大量使用SFINAE并泛化之,提供enable if, constexpr if, 乃至自动类型推断和concept check,和Java那边的套路是完全不一样的。 可以说不深入理解泛型技术基本,就不能很好理解现代的C++了。2018-01-1017
- Geek_e5dad7看到大家都说看的很享受,但是我真的看不懂😭2019-10-22115
- edisonhuangC++通过范型消除了C语言中很多易出bug的代码,实现代码重用。其中关键在于:算法的泛型;类型的泛型;数据结构(数据容器)的泛型。 C++通过类,在构造和析构函数中做资源的申请释放,通过引用解决了用指针来取值的问题。通过操作符的重载让算法代码忽略具体类型,可以有统一的表达。通过类似迭代器的范型容器来统一不同数据结构的统一算法表达。 通过抽象算法中函数的操作,用函数式编程的方式,实现算法的泛型。 总之,通过不同粒度的抽象,而让代码重用更容易,bug更少,更好维护和扩展2019-06-1811
- Join读起来真是太享受了,感觉之前看的那些STL知识被瞬间点燃了,以前思考并未达到这样的深度,能做到将技术和业务逻辑分离开的代码真是太通用了,现在回去再读一遍STL源码解析会更有体会2018-01-109
- 知知知了counter结构体有点问题,调了半天。 如果刚上大学能看到耗子书的文章就好了,看谭浩强学的c和c++真浪费生命,编程还沦为了二流,唉2018-06-0218
- saiyn从c到c++的发展过程,让我深刻理解了迭代器是个什么鬼,感谢耗子叔2018-05-317
- 郑杰可以讲讲java的类型擦除原理吗2018-01-097
收起评论