python 1991年 20世纪最成功的脚本语言 入门简单 开发难度低
Lua小巧的脚本语言
JAVA 1995年诞生 C++学好学JAVA很容易
C++ 1982年基于C语言产生的,(本家尼博士)它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计
C++98 C++标准第一个版本,以模板方式重写c++标准库,引入了STL。
学习关键:写博客记录学习历程 // 画思维导图
C++入门
c++里面有63个关键字,c语言有32个关键字。
名字空间
1.名字空间可以解决函数,全局变量名重复的问题,包在不同的名字空间里的重复函数实际上就是两个完全无关的函数。
2.名字空间允许嵌套,嵌套内部和外部没有任何关系。
3.名字空间允许重名,重名的名字空间会被合并。
4.一个命名空间定义了新的作用域,命名空间中的所有内容局限于该命名空间中,它解决了C语言中只能用文件划分作用域的缺陷。
5.使用using关键字,可以引用一个名字空间,使得这个名字空间内的所有内容对自己可见。
6.如果两个名字空间里面分别有相同的两个函数,那么即使我同时用using引用了两个名字空间,那么也不会报错,除非我使用了这个函数(因为使用函数会产生歧义,也就是不知道该调用哪个)
缺省参数
函数的参数列表中,允许存在被赋值的参数,这些参数具备以下特点:
1.如果传入了,那么会取传入的值,如果没传入,会取函数定义时被赋予的值(默认值)
2.这些参数必须位于参数列表的尾部,不能穿插
3被赋值的参数列表不能在声明和定义中同时出现,只能出现一次。缺省参数也属于函数重载。
函数重载
1.C++允许两个重名函数同时存在,但他们的参数列表不能完全相同。哪怕返回值类型不同也不可以。
2.同一个函数的不同版本。 函数重载看的是它的参数类型而不是返回值类型。
3.c语言不支持函数重载,而c++支持,这和两种语言的语言特性有关。C语言的名字修饰比较简单,只是在函数名前面加上下划线,例如int Add(int a,int b),double Add(double a,double b)在C语言里面都是_Add(),程序的运行,预处理,编译,汇编,链接,在链接阶段就会出错,产生冲突,找不到函数体。而C++的修饰规则比较复杂,不同的编译器可能底层规则也不一样,在底层出现的不是Add,而是被重新修饰过的名字,这个名字包含参数类型以及函数名,参数列表不同,则名字会不同,这就保证了名字在底层的全局唯一性,这就是为什么C++可以使用函数重载,而C语言不可以,这和语言本身的特性有关,命名规则有关。
4.若想将C++中的一个函数按照C风格来编译,可以在函数名前加extern关键字。
引用
1.
引用与指针的区别
- 首先从底层实现上来说,引用是按照指针方式实现的。其实理论上来说,引用是不占用内存空间的,但是实际上编译器实现引用是const指针实现,只是对上层把这一方式屏蔽了。不过我们可以大概的认为在C++中,引用和指针的底层实现方式大概是相同的。
- 从语法层面上来说,引用只是变量的一个别名,没有独立空间,和其引用实体共用同一块空间。
- 引用必须初始化,但是指针没有要求。
- 可以有空指针,但是没有空引用,也就是说引用不能为空。
- 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体,可以通俗的理解为引用作用于只能作用于一个实体 ,但是指针不是。
- 在sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数,在32位系统下指针是4个字节。
- 可以有多级指针,但是没有多级引用。
- 自加自减含义不同,引用自加自减是指自身所指的对象的加或减,而指针的自加或自减是指针向后偏移一个类型的大小。
- 访问实体方式不同,指针需要显示解引用,引用编译器自己处理。
- 引用比指针使用更加安全,更加高效。
一定要自己理解并概括。
内联函数
inline是一种以空间换时间的做法,省去调用函数额外开销,所以代码很长或者有循环/递归的函数不适宜用inline。
宏的优缺点:
优点:
1.增强代码的复用性。 2.提高性能
缺点:
1.不方便调试宏 2.导致代码可读性差,可维护性差,容易误用 3.没有类型安全的检查。