C++基本知识梳理

一.命名空间

概念:命名空间是新定义的一个作用域,里面可以放函数,变量,定义类等,主要用来防止命名冲突.

实现:namespace关键字 命名空间名字{ 命名空间成员 }

注意点:

  1.命名空间可以嵌套使用,还可以使用inline关键字实现版本控制(inline修饰的命名空间默认展开到外一层命名空间).

  2.同一工程中允许存在同名的命名空间,编译器最后会将相同名称的命名空间合并成一个.

 

二.缺省参数

概念:是声明或定义函数时为函数参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值.否则使用实参.

分类:

  1.全缺省参数:所有参数都带有缺省值

  2.半缺省参数:部分参数带有缺省值

  注1:必须要从右向左依次给缺省值.   原因:如果声明函数func(int a = 0,int b = 0,int c);则定义时如果写fun(1,1),则编译器可能认为a=1,b=1,c未初始化.

  注2:如果声明与定义分离,则不能在声明和定义中同时给出缺省值.原因:编译器不知道使用哪个

  注3:缺省值必须是常量或全局变量或静态变量,即使用在编译时编译器能明确知道的内容

三.函数重载

特性:在相同作用域内,允许存在参数列表不同,函数名相同的多个函数.

条件:作用域相同,函数名相同,参数列表不同. 参数列表不同体现在 参数类型不同,个数不同以及类型次序不同.与返回值类型无关.

调用原理:编译期间,编译器通过对实参类型进行推导,根据推导的结果找到对应的重载函数,如果存在且不会造成二义性则调用,否则产生编译错误.

扩展:函数名修饰规则

  C语言只是在函数名前加_,所以C语言不支持函数重载

  C++比较复杂,编译器将函数参数的类型放到函数名字中,来保证函数重载时名字在底层的不同,因此能实现函数重载

注意:C++中 函数重载与返回值是否相同无关,理由同函数名修饰规则.

extern "C"的作用:在C++函数前使用extern修饰的话,表明告诉编译器,将该函数按照C的方式编译.(用途:在C++中使用C的库函数)

extern“C“关键字详解_extern c-CSDN博客

 

四.引用

概念:引用不是新定义一个变量,而是给已存在的变量取一个新的别名,没有独立内存空间,它和引用的变量共用同一块内存空间.

特性:

  1.(重点) 引用在定义时必须要初始化

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

  3.引用一旦引用一个实体,就不能再引用别的实体.

应用场景:和指针类似,但用法比指针方便一些,不容易出现野指针等问题,如

  1.做函数参数,可以通过形参改变实参(如果不想修改可以 使用const引用)

  2.做函数返回值,注意不能引用栈上定义的返回值,因为函数结束后,栈上空间会被回收.

与指针的区别:

  1.引用就是一个别名,没有空间,而指针是具有空间的.

  2.底层实现上,引用是按照指针的方式去实现的,T&对应着T*const .差了一个解引用.

  3.主要区别体现在特性和使用形式上:

    a.引用在定义时必须要初始化,而指针没有要求.

    b.引用初始化后不能再改变,而指针随时可以.

    c.没有空引用,但有空指针

    d.sizeof中,引用大小随它引用的类型,但指针始终是地址空间所占字节数(4或8字节).

    e.引用变量的++或--是给实体的值+1或-1,但指针的++/--是指针向前偏移或像后偏移.

    f.有多级指针,但没有多级引用

  

 

posted @ 2024-03-03 21:56  HJfjfK  阅读(60)  评论(0编辑  收藏  举报