C++ 第一弹入门基础

目录

目录

1.关键字

2.命名空间

3.标准IO输入输出

4.缺省参数

5.函数重载

6.引用

7.内联函数

1.关键字

c++98的关键字一共有63个 在之后用的时候都会再次详细介绍 

C++ 第一弹入门基础_第1张图片

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什么是函数重载,为什么要有他?

是函数的一种特殊情况, C++ 允许在同一作用域中 声明几个功能类似的同名函数 ,这些同名函数的形参列表(参数个数或类型或类型顺序不同) ,常用来处理实现功能类似数据类型 不同的问题。

说人话就是在一个作用域里面声明一个同名的函数 他们可以是参数类型不同,参数个数不同,参数类型顺序不同,如果函数名和参数一样,返回值要相同。

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 在指针和引用赋值中 权限可以缩小但是不能放大

不同点:

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用在定义时必须初始化 ,指针没有要求
3. 引用在初始化时引用一个实体后,就不能再引用其他实体 ,而指针可以在任何时候指向任何一个同类型实体
4. 没有NULL引用,但有 NULL 指针
5. 在sizeof中含义不同:引用 结果为引用类型的大小,但指针始终是地址空间所占的字节数 (32位平台下占4 个字节 )
6. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,没有多级引用
8. 访问实体方式不同,指针需要自己解引用,但是引用编译器自己搞
9. 引用比指针更安全

7.内联函数

7.1什么是内联函数,为什么要有他?

以inline修饰的函数叫做内联函数,编译时C++ 编译器会在调用内联函数的地方展开 ,没有函数调
用建立栈帧的开销,内联函数提升程序运行的效率。用人话说就是,你给一个函数前面加上inline关键字,那么这个函数就只会在被调用的时候展开
7.2为什么要用内联函数? 
一个函数如果是内联函数那么他在编译阶段展开,减小了调用开销,提高运行效率,但是会使目标文件变大,所以本质是一种空间换时间的做法,而且一个函数就算加了inline关键字他也不一定就是内联函数,因为inline关键字他只是抛出一个建议,并不一定会被采纳。内联函数声明和定义不要分离,否则会出现链接错误。
7.3内联函数和宏函数的区别

内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能;宏不是函数,而inline是函数。
宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。
inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。


7.4宏的优缺点

优点:增强代码复用性,减少冗余代码。提高性能,提升代码运行效率。

缺点:宏不方便调试,很多错误无法在调试中发现。会导致代码可读性差,可维护性差,容易误用。没有安全的检查,具有副作用。

宏的替代:宏常量:用const定义常量来替代宏常量。宏函数:使用内联函数来替代宏函数。

你可能感兴趣的:(c++,开发语言)