【成神之路】C++

前言

小白程序员的我终于2022.7.11正式进入了C++的学习阶段😍😍,为此,我在这里简单梳理一些关于C++的相关知识以及成神之路🔮


导航图🗺🌌

目录

前言

一、什么是C++

二、C++的发展史

三、对于C++的学习


一、什么是C++

        C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。


        1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。


二、C++的发展史

        1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes
        语言的发展就像是练功打怪升级一样,也是逐步递进,由浅入深的过程。我们先来看下C++的历史版本。

C++发展历程
阶段内容
C with class类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符重载等
C++1.0添加虚函数概念,函数和运算符重载,引用,常量等
C++2.0更加完善支持面向对象,新增保护成员,多重继承,对象的初始化,抽象类,静态成员以及const成员函数
C++3.0进一步完善,引入模板,解决多重继承产生的二义性问题和相应构造和析构问题
C++98C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美国标准化协会的认可,以模板方式重写C++标准库,引入了STL(标准模板库)
C++03

C++标准第二个版本,语言特性无大改变,主要:修订错误、减少多异性

C++05C++标准委员会发布了一份计数报告(Technical Report,TR1),正式更名C++0x,即:计划在本世纪第一个10年的某个时间发布
C++11增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循环、auto关键字、新容器、列表初始化、标准线程库等
C++14对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的lambda表达式,auto的返回值类型推导,二进制字面常量等
C++17

在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等

C++20制定ing

        从上面表格中可以看出,C++语言的更新并没有那么的“勤快”,对比于隔壁的Java,Java似乎是半年一个小版本。

        再来看看计算机语言的排行榜(数据来源:TIOBE

         一直稳定前四的是C/C++/Java/Python,对于Python,它一般是用于人工智能领域的上层封装以及数据处理比较方便;Java呢确实也是后来居上的流行语言;而C/C++在我这里就是TOP1的,他们一般用于后台开发方面,就比如Java的JAV,底层也是用C++写的。

三、对于C++的学习

        我们在选择一名语言进行学习时,总会听到其他人的“劝说”,说C++很难,建议学Java。其实这点他们只说对了一半,C++确实很难,他难在语法复杂,语法也确实比较恶心,但他的整体难度(不仅仅是C++语言的学习,这里还包括后期整个C++方向的学习)和Java方向的学习是一样的。Java语言的设计参考了C/C++等语言,减少了一些坑,只是语法方面相对于C++难度减少了20%而已,但它后期其他知识的学习(比如Java底层库、JVM、Gc、JavaEE框架等)也是比较恶心的。至于怎么选择一门语言去学习,我这里建议不用去想他们难不难学,而是想清楚怎么学才能学好就足够了。

        那么对于程序员小白该如何学习C++呢,即C++成神之路是?

以下引用自2010年8月号《程序员》刊登的拙文《C++强大背后》最后一段


        C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。个人认为,学习C++可分为4个层次

  • 第一个层次,C++基础 (平平常常)

挑选一本入门书籍,如《C++ Primer》、《C++大学教程》或Stroustrup撰写的经典《C++程序设计语言》或他一年半前的新作《C++程序设计原理与实践》,而一般C++课程也止于此,另外《C++ 标准程序库》及《The C++ Standard Library Extensions》可供参考;

  • 第二个层次,正确高效的使用C++ (驾轻就熟)

此层次开始必须自修,阅读过《(More)Effective C++》、《(More)Exceptional C++》、 《EffectiveSTL》及《C++编程规范》等,才适宜踏入专业C++开发之路;

  • 第三个层次,深入解读C++ (出神入化)

关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;

  • 第四个层次,研究C++ (返璞归真)

阅读《C++语言的设计和演化》、《编程的本质》(含STL设计背后的数学根基)、C++标准文件《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。

由于我主要是应用C++,大约只停留于第二、三个层次。然而,C++只是软件开发的一环而已,单凭语言并不能应付业务和工程上的问题。建议读者不要强求几年内“彻底学会C++的知识”,到达第二层左右便从工作实战中汲取经验,有兴趣才慢慢继续学习更高层次的知识。虽然学习C++有难度,但也是相当有趣且有满足感的。

        对于这里,我们学习C++的过程中不要把精通C++作为一个短期目标 ,而是要长期持续的学习与应用,慢慢沉淀。

        C++在校期间,我最多也就只能达到第二层和第三层中间,且并不能完全迈过第二层,因为在校和在公司工作是远远不同的,在公司工作会让我们得到更多的工程经验。

        说点有用的吧,对于C++的学习,我推荐一些书给大家。

书籍推荐
初窥门径《高质量程序设计指南——C/C++》
潜心修行《Effective C++》、《C++ Primer》(这本书当做字典使用)
深入浅出《STL 源码剖析》、《深度探索C++对象模型》

学习记录:

  • 📆本篇博客整理于2022.7.11
  • 🎓作者:如何写出最优雅的代码
  • 📑如有错误,敬请指正🌹🌹
  • 🥂如果觉得写的不错,看完了别忘了点赞和收藏啊,感谢支持😏😏
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如何写出最优雅的代码

感谢支持,我将继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值