C++Primer(第五版)学习笔记——函数重载和函数匹配(第六章)

重载函数其实就是为了方便记忆那些实现方法、作用类似的一类函数。

重载函数必须在形参类型或者数量上有所不同。

重载和const形参:

一个拥有顶层const的形参无法和另一个么有顶层const的形参区别开来(因为既可以用常量初始化一个const形参,也可以用 非常量初始化一个const形参。)、

cast_const和重载:(这里没太看懂)

书中给了个例子:

定义了一个形参是常量引用,返回值也是常量引用的函数。

此时,我们可以用非常量实参调用这个函数,但是返回值依然是一个常量。

我们要是想要返回一个非常量,就需要用到cast_const:

定义一个形参不是常量,返回值也不是常量的函数,在函数体内,转换两个形参为const来调用常量版本的函数,得到一个常量的结果,然后在把此结果转换为非常量返回,此时因为我们是将一个非常量转换为常量,再转换为常量,结果是安全的。

讲真,这里不知道有什么用,看的迷迷糊糊的。直接在函数体里写实现过程不就行了,为什么要转来转去的?(大概是为了方便改动?)

代码:

常量版本:

const string &shorterString(const string&s1 , cosnt string s2)
{
    return s1.size() <= s2.size() ?s1:s2;
}

非常量版本:

string &shorterString(string &s1,string &s2)
{  
    auto &r = shorterString(const_cast<const string&>(s1),const_cast<const string&>(s2));
    return const_cast<string&>(r);
}
函数匹配:

三步:

1.确定候选函数:与被调用函数同名,声明在调用点可见

2.确定可行函数:形参数量相同、与形参类型相同或者能转换成形参类型

3.寻找最佳匹配.

类型转换评级:

1. 实参类型和形参类型相同。

    实参从数组类型或函数类型转换成对应的指针类型

    向实参添加顶层const或者从实参中删除顶层const

2通过const实现转换匹配(非常量实参传给常量形参)

3通过类型提升实现的匹配(小整型转换成int类型)

4通过算术转换实现的匹配(所有算术类型转换的级别都一样)

5通过类类型转换实现的匹配



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值