重载函数其实就是为了方便记忆那些实现方法、作用类似的一类函数。
重载函数必须在形参类型或者数量上有所不同。
重载和const形参:
一个拥有顶层const的形参无法和另一个么有顶层const的形参区别开来(因为既可以用常量初始化一个const形参,也可以用 非常量初始化一个const形参。)、
cast_const和重载:(这里没太看懂)
函数匹配:书中给了个例子:
定义了一个形参是常量引用,返回值也是常量引用的函数。
此时,我们可以用非常量实参调用这个函数,但是返回值依然是一个常量。
我们要是想要返回一个非常量,就需要用到cast_const:
定义一个形参不是常量,返回值也不是常量的函数,在函数体内,转换两个形参为const来调用常量版本的函数,得到一个常量的结果,然后在把此结果转换为非常量返回,此时因为我们是将一个非常量转换为常量,再转换为常量,结果是安全的。
讲真,这里不知道有什么用,看的迷迷糊糊的。直接在函数体里写实现过程不就行了,为什么要转来转去的?(大概是为了方便改动?)
代码:
常量版本:
复制代码1
2
3
4const string &shorterString(const string&s1 , cosnt string s2) { return s1.size() <= s2.size() ?s1:s2; }
非常量版本:
复制代码1
2
3
4
5string &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通过类类型转换实现的匹配
最后
以上就是简单小虾米最近收集整理的关于C++Primer(第五版)学习笔记——函数重载和函数匹配(第六章)的全部内容,更多相关C++Primer(第五版)学习笔记——函数重载和函数匹配(第六章)内容请搜索靠谱客的其他文章。
发表评论 取消回复