C/C++教程

C++函数匹配

本文主要是介绍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++函数匹配的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!