C++名空间、函数重载、引用

1.命名空间
1.1 命名空间的定义
为了解决函数、变量重名导致的命名冲突,给变量定义一个作用域来区分同名的变量。
命名空间的定义:namespace 命名空间名 { 成员 }
命名空间的定义可以嵌套和分段。
1.2 命名空间的使用
(1)使用变量的时候在变量名添加 空间名::
(2)用using将命名空间成员引入 using 命名空间名::成员名
(3)将整个命名空间引入 using 命名空间名;
将空间的变量引入相当于声明以下使用的变量来自于该空间,若存在同名的全局变量,则会编译报错。

2 缺省参数
在函数声明或者定义的时候设置默认值。 但是只能在声明或者定义的其中一处设置默认值,否则有可能出现设置的参数不一致的情况,为了避免这种情况,语法上就只允许在一处设置默认值,即使两处设置的默认值不产生矛盾也编译不通过。

函数形参可以部分也可以全部缺省。但是缺省的顺序必须从右往左依次给出,中间不能间隔。这是因为在调用函数时实参传递的顺序是从左向右给形参做拷贝,因此在参数的个数足够的情况下才不会出现某个形参没有值的情况。

3.函数重载
在同一作用域下,函数名相同,形参列表不完全相同(只要按照形参表列的顺序构成的类型字符串不同即为不同),所以形参表列的长度、类型、顺序不同都能构成重载。

C语言中支持函数重载而C++中支持重载原因是在C++编译器中函数的修饰名包含了函数的形参列表,所以不同的形参列表,编译得出的函数名字不同,不会产生同名问题,而C语言中没有添加形参来修饰函数名,因此无法重载。

函数的重载与是否设置缺省参数无关,函数的重载只看形参列表的类型。引用类型可以和被引用的类型构成 重载,因为引用类型也是一种数据类型。

4.引用
引用是一个变量的别名。
引用的定义:类型& 引用变量名=引用实体;
引用的类型和实体的类型必须一样。

引用的特性:
1) 引用定义的时候必须初始化
2)一个变量可以有多个引用
3)一旦引用某个实体,就不能再引用其他实体

引用和实体相互赋值:
当‘=’的左边是某个具体的实体,‘=’的作用是拷贝内存中的内容。
当‘=’的左边是某个实体的引用,若是在定义一个引用,‘=’的作用是引用传递(引用指向实体的空间,引用变量名为实体变量的一个别名);若不是在定义引用,‘=’的作用是拷贝。

4.2 常引用

定义: const 类型& 引用变量名=常量实体;
其中常量实体可以是const 修饰的变量、字面常量、隐式类型转换产生的中间变量。

且对于一个常量实体,不能定义普通的引用而必须定义常引用。防止通过引用修改常量实体的值而导致错误。

4.3 引用的使用场景
作为函数的形参类型,函数的返回类型。引用传递,没有发生拷贝,效率更高。

4.4引用和指针的区别
1.定义的时候引用必须初始化,指针没有要求。
2.没有空引用,而有空指针。
3.引用在初始化之后不能再引用其他实体,而指针可以指向同类型的其他实体。
4.sizeof指针的结果是4(32位平台),即指针变量所占字节数;sizeof引用的结果是引用实体变量所占的字节数大小。
5.有多级指针,而没有多级引用。
6.引用加1是引用实体的值加1,指针加1是加上指向类型的大小,即指向下一个同类型的数据
7.引用比指针使用更安全,且访问实体的时候不需要显式解引用。

5 内联函数
对于某些简单的函数,添加inline关键字使得在编译的时候将函数体展开,而不必在调用是时候将函数压栈调用结束之后出栈,提高程序运行效率。

对于较为复杂的函数即使添加了inline关键字,仍然和普通函数一样在调用的时候需要将函数压栈。为了避免链接错误,内联函数不要将声明和定义分离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值