C++入门前须知10点

1.c++中的关键字

C++总计63个关键字,C语言32个关键字。

cc48c863fabc4316b4e7109c4f7efc56.png

2.命名空间

(std是所有c++库的命名空间)

为什么会有命名空间?

解决C语言中命名冲突的问题。

解决方法:采用域作用限定符(::) :指定编译器搜索的位置。

编译器默认的搜索顺序:先局部再全局。

命名空间域

大体有4种域:全局域、局部域、命名空间域、类域。

命名空间域的特点:

1.不会影响生命周期。

2.只能定义在全局,具有隔离作用。

3.当函数命名相同时会将两个域合并。

命名空间的三种使用方法

(展开:开放访问限权)

1.命名空间 +  :: 

fd37eb944e3143e1a5c4dbecb67d7c8b.png

2.单独展开一个  using + 命名空间 + :: + 所需要使用的作用符

d0f9dd605ec54a70af66dd7c8ee6c994.png

3.全展开 using namespace 命名空间

7c305f01bba649ae8824699ed8d807dc.png

特:命名空间内可以随意套娃。

3.c++中的输入&输出

1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。


2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。


3. <<是流插入运算符,>>是流提取运算符


4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型


5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识.
 

4.缺省参数

缺省参数是 声明或定义函数时为函数的 参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

分类和特性

1.半缺省参数

69482576c37d44e184befc91e4eac804.png

特点:缺省参数从右往左依次序给,不能间隔和跳跃。

2.全缺省参数

1989f3dbecc348c49008b8668f7aa9b4.png

特点:传参的顺序从左往右依次,不能跳跃。

注意:缺省值必须是常量或者全局变量

特别:缺省参数不能同时在函数声明(.h文件)和定义中出现.给缺省值在声明中给(.h文件)。

5.函数重载

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

构成重载的条件

1.参数的类型不同

61902b476efc42419c7c8a8932e711aa.png

2.参数的个数不同

170a2d81db714522ab4b0e8075b37871.png

3.参数的类型顺序不同

a19b2c4cb42845609842170237e90c29.png

特别:如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。

C语言不支持函数重载的原因

在C/C++中,一个程序要运行起来,需要经历以下几个 阶段预处理、编译、汇编、链接
C语言在链接时,直接用函数名去找地址,有同名函数时区分不开,而c++中引入了函数名修饰规则,名字中引入参数类型。

程序运行的几个阶段

预处理:展开头文件、宏替换、条件编译、去注释。

编译:检查语法并生成汇编代码。

汇编:把汇编代码转成二进制机器码。

链接:将上述生成文件合并生成可执行文件。

798a065f903d4f0e89f74fba645896d5.png

034dcb3ba4f7426b86c43b735cf5ae3e.png

6.引用  &

引用不是定义一个新变量,而是给已存在的变量取一个别名。且编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

特点

1.引用在定义时必须初始化。

2.一个变量可以有多个引用。

3.引用一旦引用一个实体,就不能引用其他实体。(不能改变指向)

常引用

传具有常性的量作为参数时要加const 例:

原因:权限可以缩小,但不能放大。

 使用场景

1.做函数参数

ef80af6bacee4fe4a40dfd9f4bc9660e.png

2.做返回值

0f0203ce179045f5b47ab50f5a111a7f.png

注意:如果函数返回时,出了函数作用域,如果返回对象还在(没有还给系统),则可以使用引用,如果已经还给系统,则必须用传值返回。 

传值和传引用的区别

传值返回:传递实参或者返回变量的一份临时的拷贝。

传引用返回:传递实参或者返回变量的别名。(效率更高)

引用和指针的区别

语法上:

引用:引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。

指针:指针是一个地址,需要开空间。

底层上:引用是按照指针方式实现的。(也是开了空间的!)

引用和指针在功能上是类似的,但是引用不能替代指针!!!

原因:引用定义后不能改变指向。 (引用不能实现链表,用指针实现)

7.inline(内联函数)

含义:以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

未展开:fb0c77ea899b4d65b18aad73a3975667.png

展开后:

8c5f87a861ed48f9a090d93c0488b0f1.png

特点

1 . inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用。

(递归函数不会展开 ,行数过多也不会展开)
 

缺陷:可能会使目标文件变大。

优势:少了调用开销,提高程序运行效率
 

2 . inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址
了,链接就会找不到。

声明和定义分离相关知识

为什么要声明和定义分离?

防止链接错误问题。

做法:声明都包含于(.h)头文件中,而定义都在(.cpp)文件中。 这样可以避免链接时两个文件生成的合并后造成重定义问题。

题外:#pragma once e8bdfaa216944b108065fe809e087b60.png

8.auto关键字(c++11)

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量、
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。(自动推导类型)

小知识:使用  typeid(函数).name()可以打印类型。

注:使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。
 

使用方法

1.auto与指针引用结合起来使用

02c43440241f4fee9cdb27eb5246e696.png

用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须
加  &

2.同一行定义多个变量当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量
 

b92eb0148b784cd281742982fe4b59a4.png
 

auto不能用的地方

1.不能做函数的参数

fa2308f7cf104e6097dc902769c44968.png

2..不能声明数组

f4b1ab987e2d4395b9f71f783e0994b6.png

9.范围for

for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。


注:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。

使用条件

1.for循环迭代的范围必须是已知的.

2.迭代的对象要实现++和==的操作。

3.打印或修改数组需注意7deda30ae38841bc964a0c302b8b40b1.png

10.指针空值nullptr (c++11)

在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下方式对其进行初始化:
5fd634227f15414092491cb0d6d7642f.png

NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:b5fcf51484634b2a855774ecf3e043b2.png

NULL可能被定义为字面常量0者被定义为无类型指针(void*)的常量。不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如:

d2471f63e39f4f838d034bc49640d636.png

程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖。在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void
*)0。

使用注意

1.在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。
 

2.在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。。

3.在c++代码中表示空值指针时都用nullptr

小编自语以上资料来自于网课资源和本人个人学习总结,用于自己后续的复习。会根据以后的学习不断完善、更新,欢迎大家和我一起讨论学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值