C++函数匹配
2021/11/16 22:10:46
本文主要是介绍C++函数匹配,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 函数重载
- 参数判断
- 作用域
- 函数匹配
- 候选函数
- 可行函数
- 最佳匹配函数
- 匹配级别-类型转换
函数重载
同一作用域,函数名相同而参数列表不同的函数成为重载函数;
ps:main函数不能重载
参数判断
// 以下两个函数没有区别 void func(int x); void func(int); // const无法区分参数类型 void func(int x); void func(const int);
作用域
void func(double); void func(string); int main() { func(3.14); // 合法 func("hello world"); // 合法 void func(int); // 隐藏外层作用域声明的重载函数 func(3.14); // 非法!错误 func("hello world"); // 非法!错误 func(1024); // 合法 }
函数匹配
重载函数
void func(); void func(int); void func(int, int); void func(double, double = 3.14);
候选函数
函数选定的原则:先判断函数名,然后再判断参数类型
特征:
①与被调用的函数同名;
②在调用点可见(合法);
可行函数
在匹配过程中,通过候选函数判断选出候选人,然后进行可行性(参数列表)判断
特征:
①参数数目相同;
②参数类型相同或可通过转换;
最佳匹配函数
从可行函数中选取最佳的函数,有且仅有一个可行函数满足以下条件:
①该函数每个实参的匹配都不劣于其他可行函数的匹配;
②至少有一个实参优于其他可行函数的匹配;
若没有唯一满足上述条件的函数,则返回二义性调用错误!
匹配级别-类型转换
1、精准匹配
①实参与形参类型相同
②实参转换为对应类型的指针
③向实参添加顶层const或从实参中删掉顶层const
2、通过const转换的匹配
对于隐式类型转换而言:
// 非常量可以转换为常量 void func(const int &x); int x = 1024; // 正确!^v^ func(x); // 常量不能转换为非常量 void func(int &x); const int x = 1024; // 错误!含有隐式类型转换int &x = const int; func(x);
3、通过类型提升实现的匹配(强制类型转换)
4、通过算数类型转换或指针转换实现的匹配
5、通过类类型转换实现的匹配
这篇关于C++函数匹配的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21拼接的xml报文,尖括号都被转移成了< 是什么原因-icode9专业技术文章分享
- 2024-09-21Svg Sprite Icon教程:从入门到实践
- 2024-09-21Svg Sprite Icon实战:从入门到上手
- 2024-09-20构建一个多PDF RAG聊天机器人:使用Langchain和Streamlit及代码
- 2024-09-20whatsapp webhook 回调的签名验证偶尔会失败是什么原因-icode9专业技术文章分享
- 2024-09-19Excel数据导出课程:初学者必备教程
- 2024-09-19Excel数据导入课程:新手入门指南
- 2024-09-19RBAC的权限管理入门教程
- 2024-09-19如何使用Svg Sprite Icon制作图标
- 2024-09-19uniapp 如何实现点赞后全局更新数据-icode9专业技术文章分享