类型匹配

实参和形参存在一个类型匹配的过程,不同的类型匹配有不同的优先级:精确匹配>提升匹配>标准转换匹配>用户自定义转换匹配。以下分别说说这几种情况:

1、精确匹配

有左值转换匹配和限定符转换匹配两种,左值转换匹配又分为:左值到右值、数组到指针、函数到指针。数组、函数都是类型,数组类型不是指针类型,函数类型也不是指针类型,但由于函数形参类型无数组、函数这来两种类型,因此存在数组到指针、函数到指针的转换。这些转换都属于精确匹配。限定符转换只作用在指针所指向对象,对于指针本身的限定符则不进行任何转换,当作完全一致匹配处理。限定符包含const、volatile。以下例子说明限定符转换:

void ff(const int *);

void f(int * const);

int *p = NULL;

f(p);//无限定符转换,一致匹配

ff(p);//限定符转换,属于精确匹配

2、提升匹配

包括整值类型(char,unsigned short,short,int,unsigned int, long, unsigned long)间的提升、浮点类型间的提升、枚举类型或布尔型到int的提升。所有的提升都保证提升后的类型能够表示未提升前类型的所有值。

3、标准转换匹配

整值类型转换匹配、浮点类型转换匹配、浮点--整值类型转换匹配、指针转换匹配、布尔转换匹配。标准转换匹配不能保证数据的安全,即不能保证转换后不发生截断或精度损失情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值