C++primer学习笔记-----6.4函数重载
2017-05-10 08:13
211 查看
【如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。
函数重载通常用于逻辑功能相同,但处理对象类型不同的函数,以此减轻程序员记名字的压力。】
【重载和const 形参:
顶层const 不影响传入函数的对象(也可以从左值当右值用考虑)。一个拥有顶层const 的形参无法和另一个没有顶层const 的形参区分开来。
另一方面,如果形参的const 是底层的,则通过区分其关联的对象是常量还是非常量可以实现函数重载。我们只能把底层const 对象传递给底层const 形参,而非常量可以用于初始化const 对象,所以是否是底层const 的对象都能接受非常量实参,不过如6.6.1 节将介绍的,当传递一个关联非常量的对象时,编译器会优先选用非常量版本的函数。】
【const_cast 和重载:
const_cast 在重载函数的情境中尤其有用,它可以显式地转换传入参数的类型,进而可以将整个过程封装成针对不同类型的同名函数。(返回值类型也可以通过它改变)const string &shorterString(const string &s1, const string &s2)
{
return (s1.size() <= s2.size()) ? s1 : s2;
}
string &shorterString(string &s1, string &s2) // 上一个函数的重载版本,利用const_cast 实现返回非常量的引用
{
auto &r = shorterString(const_cast<const string &>(s1), const_cast<const string &>(s2));
return const_cast<string &>(r);
}】
【调用重载的函数:
函数匹配实质我们把函数调用与一组重载函数中的某一个关联起来的过程,又叫函数确定。
在大多情况下,确定调用一组重载函数中的哪个函数比较容易;但是在另外一些情况下,比如参数数量相同且类型可以相互转换,确定调用哪个函数就比较困难了,我们将在6.6 节介绍这种情况下编译器的处理方法。】
【当调用一组重载函数时有可能出现三种结果:
编译器找到一个与实参最佳匹配的函数,并生成调用该函数的代码;
找不到任何一个函数与调用的实参匹配,此时编译器发出无匹配的错误信息;
有多于一个函数可以匹配,但是每一个都不是明显的最佳选择,此时将发生错误,称为二义性调用。】
【重载与作用域:
重载对作用域的一般性质并没有什么改变:如果我们在内层作用域中声明名字,它将隐藏外层作用域中的同名实体,在不同的作用域中无法成功地重载函数。
在C++ 语言中,名字查找是发生在类型检查之前的。】
函数重载通常用于逻辑功能相同,但处理对象类型不同的函数,以此减轻程序员记名字的压力。】
【重载和const 形参:
顶层const 不影响传入函数的对象(也可以从左值当右值用考虑)。一个拥有顶层const 的形参无法和另一个没有顶层const 的形参区分开来。
另一方面,如果形参的const 是底层的,则通过区分其关联的对象是常量还是非常量可以实现函数重载。我们只能把底层const 对象传递给底层const 形参,而非常量可以用于初始化const 对象,所以是否是底层const 的对象都能接受非常量实参,不过如6.6.1 节将介绍的,当传递一个关联非常量的对象时,编译器会优先选用非常量版本的函数。】
【const_cast 和重载:
const_cast 在重载函数的情境中尤其有用,它可以显式地转换传入参数的类型,进而可以将整个过程封装成针对不同类型的同名函数。(返回值类型也可以通过它改变)const string &shorterString(const string &s1, const string &s2)
{
return (s1.size() <= s2.size()) ? s1 : s2;
}
string &shorterString(string &s1, string &s2) // 上一个函数的重载版本,利用const_cast 实现返回非常量的引用
{
auto &r = shorterString(const_cast<const string &>(s1), const_cast<const string &>(s2));
return const_cast<string &>(r);
}】
【调用重载的函数:
函数匹配实质我们把函数调用与一组重载函数中的某一个关联起来的过程,又叫函数确定。
在大多情况下,确定调用一组重载函数中的哪个函数比较容易;但是在另外一些情况下,比如参数数量相同且类型可以相互转换,确定调用哪个函数就比较困难了,我们将在6.6 节介绍这种情况下编译器的处理方法。】
【当调用一组重载函数时有可能出现三种结果:
编译器找到一个与实参最佳匹配的函数,并生成调用该函数的代码;
找不到任何一个函数与调用的实参匹配,此时编译器发出无匹配的错误信息;
有多于一个函数可以匹配,但是每一个都不是明显的最佳选择,此时将发生错误,称为二义性调用。】
【重载与作用域:
重载对作用域的一般性质并没有什么改变:如果我们在内层作用域中声明名字,它将隐藏外层作用域中的同名实体,在不同的作用域中无法成功地重载函数。
在C++ 语言中,名字查找是发生在类型检查之前的。】
相关文章推荐
- C++primer学习笔记-----6.4函数重载
- DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等
- 【C#学习笔记】函数重载
- [C++学习笔记]--内联函数、函数重载、函数defualt参数
- C++学习笔记五——函数重载(多态)、函数模板及函数模板重载和完全匹配与最佳匹配
- PHP学习笔记之:函数重载
- c++学习笔记之函数重载与const的关系
- Effective C++学习笔记:在函数重载和设定参数缺省值间慎重选择
- VS2010 C++ 学习笔记(一) 引用 函数参数默认值 函数重载 内联inline
- C++学习笔记(八):函数重载、函数指针和函数对象
- JAVA学习笔记(3-2-函数与重载)
- C++学习笔记_6:函数的重载
- C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
- C++学习笔记17——函数重载
- Javascript学习笔记之函数重载和类型检查
- 【C++学习笔记】函数重载和函数覆盖
- C++学习笔记23,类内函数重载
- 新手学习C++笔记4:函数的原型化与重载
- C++学习笔记->函数重载
- C++学习笔记之 函数重载和函数指针在一起