栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习——1.基础认识

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习——1.基础认识

文章目录
  • 0. 说明
  • 1. 为什么要学习C++
    • 1.1 Unix和C
    • 1.2 编译器
    • 1.3 C++
    • 1.4 C++版本
    • 1.5 C++历史遗留问题
    • 1.6 C++现状
  • 2. C和C++的关系
    • 2.1 兼容性问题
    • 2.2 编码风格
    • 2.3 区别
    • 2.4 注意

0. 说明

以下内容均来自慕课网课程:

  • 趣味 C++ 入门
  • 趣味 C++ 进阶

会在此基础上补充一些相关内容和个人理解等。


另外,请教了C++大佬之后,贴上几个学习和使用C++很重要的网页:

  • cplusplus:有例子,可以网页上运行
  • C++ reference:很规范,各种C++版本标准都有,写的比较官方,不容易看懂
  • C++ Standard Library reference:微软的C++引用/文档

  • 前两个都是标准的C++(针对linux的gcc编译器的)
  • 微软的是modern C++(针对windows的mscv编译器的)
  • 一般以前者为准,后者会夹带一些自己的私货
1. 为什么要学习C++ 1.1 Unix和C


1969年,Bell实验室诞生了Unix系统和C语言。

感谢unix和c语言之间有什么关系

  1. 目前的unix的源码,绝大多数都是由C语言编写。小一部分为汇编语言。
  2. 二者相互促进。最早的unix是由B语言编写的,但是由于不够高效及功能不够完善,为编写更好的unix系统,为此将B语言再次优化,从而形成C语言。C语言因为unix系统而诞生。即先有unix,再出现C语言,然后C语言实现了更强的unix系统。
  3. unix与C语言相辅相成,共为一体。unix系统及其演变出的类unix系统,搭配的编译器是对C语言规范支持及执行最佳选择。
1.2 编译器

另外,感谢你是否好奇,第一个C语言编译器是怎么来的

  • C语言具有自举特性,自举的意思是该语言的编译器可以编译出编译该语言的编译器。
  • 最初的C语言编译器可能是B语言或者B+汇编语言写成的,但是后来的C编译器就完全是使用C语言写的了
  • Unix上的C编译器就是gcc(GNU Compiler Collection)

关于linux和gnu的关系,可以看看Linux内核起源之Linux之父

关于gcc的使用,可以看看查看unix系统的c语言编译器,UNIX中CC编译器

1.3 C++

80年代,在C的基础上,发展了C++

下图是C++的发明者

  • 一开始,C++还不叫C++,而是C with classes,即带有类的C语言,也就是是面向对象的C语言。
  • 到1983年,被正式命名为C++
1.4 C++版本

为了保证C++的标准性问题,C++标准委员会成立。

  • 并于1998年发布了C++98,也就是第一个C++国际标准
  • 参考Tour
  • 已有的C++标准为:
    • C++98
    • C++ 03(2003年)
    • C++ 11(2011年)
    • C++ 17
    • C++ 20

题外话,本科学习使用的谭浩强老师的C++教材,

  • 以第三版为例,书是2015年出版的,
  • 所以那时候虽然C++11已经出了,但是这本书使用的还是C++ 03的标准。

  • 上图中 2003年ISO又发布了第二版C++标准,即目前使用的C++
  • 因此,对于我这个本科17级来说,学的还是C++ 03,结果上班就是C++ 11,17。。瞬间懵逼
1.5 C++历史遗留问题

  • 因为C++诞生比较久,因此要保证兼容旧的代码,又要发展新的特性,就会有些不方便的地方
  • 另外,上述4种语言中,只有C++没有 自动垃圾回收机制(Garbage Collection,简称为gc)
  • 因此在写C++的时候,不仅要考虑资源的分配,还要考虑资源的回收。

以上原因,使得C++的上手门槛比较高,学习路线也比较陡峭

1.6 C++现状

感觉上,使用范围变窄了。

  • C++正逐步退出它不适合的领域,例如:Web服务器,界面开发,移动应用开发。
  • 而在适合它的领域,C++越来越牢固

C++的优点:

  • 没有gc(垃圾自动回收机制),性能非常高
  • 可以直接操作指针,这一特性使得C++在密集运算,视频流媒体,人工智能等对性能要求非常高的场景下,几乎唯一的选择。
2. C和C++的关系 2.1 兼容性问题


很多编译器都是同时支持C语言和C++语言的,甚至支持二者的混编。

  • 但是在.c后缀的文件里,只支持C语言的语法,不支持C++的语法
  • 在.cpp后缀的文件里,C语言和C++的语法都支持
2.2 编码风格


通常把C语言风格实现的代码称为 C Style,把C++语言风格实现的代码称为C++ Style

一般这个Style会使用谷歌的编码Style,参考:

  • Google 开源项目风格指南——中文版
  • Objective-C 风格指南
2.3 区别

一般认为C和C++最大的区别在于:

  • 前者是面向过程的,函数从头写到尾,可复用性比较差
  • 后者是面向对象的,最典型的就是支持类,同时有继承多态等机制,可复用性较高
  • 但这不代表C只能写面向过程,C++只能写面向对象
    • C也可以使用结构体和指针,实现面向对象的功能
    • C++里也可以只使用函数,进行面向过程的编程

另一个区别在于,C++提供了功能强大的标准库

  • STL(Standard Template Library)
  • 可以看一下Standard Template Library(STL,标准模板库)有一个比较基础的了解。或者也可以看看相应的wiki百科——标准模板库
    • 感觉就像你有了python的基本语法后,也可以去学习使用set,dict,list等更高级的数据类型(这些已经被纳入python的内置库了)
    • STL里提供的一些内容就像python的内置库一样。
    • 个人理解,不对请指正。

  • 这个标准库里已经帮你实现了 数学库、链表、字符串和线程等功能,在C里,你可能要自己实现这些内容。
  • 即C++有更多开箱即用的特征,而C语言要考虑更多的底层和实现细节。
2.4 注意

C和C++都没有垃圾自动回收机制,都需要手动释放

  • 很容易出现没有释放
  • 或者同一片内存释放多次的情况
  • 而且这种问题一般出现在运行时,比较难找,很难进行debug
暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号