Day01——问题:
quest1:
下列代码运行结果是什么?
answer:结果输出2,namespace中的函数会向namespace域中查找i,而无法向其他区域查找,其他区域定义的i会在其区域将namespace中的i覆盖
一、函数重载
多个在同一作用域下的具有不同的参数列表的同名函数
不同的参数列表:参数个数或参数顺序或参数类型不同
特殊:参数列表不同,但内含缺省函数,使调用时可能会引起歧义的,也算函数重载
C语言不支持函数重载,而C++支持函数重载的原理:
- C语言在编译时,对调用的函数名会进行修饰,不会因为函数的参数列表不同而修饰不同
- C++在编译时,对调用的函数名会根据其参数列表的不同,而进行不同的修饰,但返回类型不同不会使之不同,所以函数的返回类型不同不会引起函数重载
二、引用&
含义:给变量取别名,与原变量共用一块空间
用法:type& name1 =name2;
作用:
- 函数传参
- 作为函数返回值
特殊:
- 权限改变应该注意到,引用可能引发的权限改变,上图所示的用法会引起权限的扩大,由只读变为可读可写,无法引用成功;其中引用引起的权限的平移或缩小,都可以正常使用。
- 引用表达式
- 不同类型间的引用
表达式的返回时和变量在类型转换时会产生具有常属性的临时变量,引用时,权限同样会发生扩大,应该使用const修饰
区分:const type* p1和int const*p1,前者的const修饰p1指向的内容,后者的修饰p1本身的值。
注意:
- 引用在定义时必须进行初始化
- 一个变量可以有多个引用
- 引用只可以作为一个变量的别名
- 指针和引用在底层的实现是一样的,但语法上认为引用不会开辟空间
问题:
- 引用可以完全代替指针吗?
- 请指出下列代码存在的所有问题: