目录
目录
1.关键字
2.命名空间
3.标准IO输入输出
4.缺省参数
5.函数重载
6.引用
7.内联函数
1.关键字
c++98的关键字一共有63个 在之后用的时候都会再次详细介绍
2.命名空间
2.1什么是命名空间,为什么要有他?
在c++中为了避免相同名字的变量,函数,类发生名字冲突,使用namespace关键字进行命名空间定义 namespace+空间名 {} 命名空间定义了新的数据域,命名空间的所有内容都局限于该空间,命名空间可以嵌套 如果出现多个名字相同的命名空间 编译器会将他们合成到一个命名空间中。
2.2命名空间的使用方法?
比如namespace N {int a;}
1. 加命名空间名称及作用域限定符 N::a
2. 使用using将命名空间中成员引入using N::a
3.使用using namespace 命名空间名称引入 using N
3.标准IO输入输出
3.1什么是标准IO输入输出?
用cin--istream cout--ostream 搭配流插入,流输出运算符
由于历史问题 很多时候编译器不支持iostream.h这个头文件 所以推荐使用std::cin std::cout这种方式
3.2为什么要使用他们呢?
使用方便,不需要格式控制,因为在istream和ostream类中,已经将所有内置类型的输入和输出重载过了
3.3对于自定义类型opterator>> 和operator<<()的重载
必须重载成友元函数
4.缺省参数
4.1什么是缺省参数?
4.2缺省参数分类
分为全缺省和半缺省 全缺省就是全给赋值 半缺省就是部分给赋值
4.3注意事项
半缺省参数必须从右往左依次来给出,不能间隔着给 缺省值必须是常量或者全局变量
缺省参数不能在函数声明和定义中同时出现 如果同时出现编译器无法区分那个是缺省
5.函数重载
5.1什么是函数重载,为什么要有他?
说人话就是在一个作用域里面声明一个同名的函数 他们可以是参数类型不同,参数个数不同,参数类型顺序不同,如果函数名和参数一样,返回值要相同。
5.2函数重载的调用原理?
在编译时,编译器会对传递的实参类型进行推演,根据推演的结果选择合适的类型的重载函数进行调用; 如果存在类型完全匹配的函数,则直接调用;如果参数类型不是完全匹配,则编译器会尝试进行隐式类型转换,如果转换之后有合适的函数可供调用,则调用,否则编译失败
5.3为什么C++能支持函数重载但是C却不支持呢?
C的函数名字修饰规则是在函数名前面加_,而C++可以通过函数修饰规则(将类型信息也编译到名字中)来区分 但是C无法区分
5.4extrem 'C‘的使用,为什么要有?
很多情况下我们都会对C和C++进行混编,但是C语言和C++的编译器对函数名字修饰规则不同,在C和C++混合编程的场景中,就需要保证最终的名字一致
5.5常见的约定调用
自己百度一下吧
6.引用
6.1什么是引用?
感性理解:引用相当于起别名比如刘备 别人也可以叫他刘玄德 但是这两个名字指向同一个人 所以引用起别名让别名也可以指向和本名同一块地址空间并不会产生新的地址,这样导致了引用的时候必须有原名(必须初始化) 不能多个人用一个别名要不分不清但是一个人可以有很多外号(别名)所以一个变量可以有多个引用 引用一旦指向了一个人不能再指向其他人 const常量不能引用,类型不同不能引用
引用可以用关键字&
6.2为什么要用引用呢?
6.2.1传参传返回值效率更快 但是这是为什么?
感性理解:我要找张三 张三直接来找我耗费的资源肯定比张三找了第三个人来和我做事情的消耗资源要低
理解:传值返回的时候由于所传的返回值在出函数的时候函数栈帧就已经销毁了 所以传值返回本质上是传回了值的临时拷贝 但是引用返回可以省去临时拷贝的时间 效率高
注意:作为返回值的时候不能返回函数栈上的空间
6.3指针和引用的区别是什么?
在语法上 引用是起别名所以没有自己的内存空间 但是在底层实现上引用是对指针进行了封装所以是有自己的内存空间的 T&--->T* const const T& ---> const T* const
不同点:
7.内联函数
7.1什么是内联函数,为什么要有他?
内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能;宏不是函数,而inline是函数。
宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。
inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。
7.4宏的优缺点
优点:增强代码复用性,减少冗余代码。提高性能,提升代码运行效率。
缺点:宏不方便调试,很多错误无法在调试中发现。会导致代码可读性差,可维护性差,容易误用。没有安全的检查,具有副作用。
宏的替代:宏常量:用const定义常量来替代宏常量。宏函数:使用内联函数来替代宏函数。