原创 【博客大赛】《C++ Primer》学习笔记(21)函数的匹配

2016-3-22 16:04 782 12 12 分类: MCU/ 嵌入式 文集: Qt和Cpp
当函数具备明显不同个数的参数,或参数有明显不同的类型时,匹配显得很简单。
但有时候会很麻烦,比如:
void f();
void f(int);
void f(int, int);
void f(double, double = 3.14);

当调用f(5.6)的时候,会调用哪一个呢?
答案是:
void f(double, double = 3.14);

函数匹配的第一步,是找到可见的可被重载的函数,称为candidate functions。
函数匹配的第二步,是找到参数可以匹配上的函数,称为viable functions。
函数匹配的第三步,是找到参数类型最匹配的函数,称为best match。
 • A函数的参数匹配,没有一个比B函数差的。
 • A函数的参数匹配,至少有一个比B函数要好。

因此,如果是调用f(42, 2.56)?
答案是:
编译器会拒绝做出选择。

再举个例子:
void ff(int);
void ff(short);
当调用ff('a')时,实际上调用的是ff(int),因为char会被默认转换成int。

再举个例子:
void manip(long);
void mainip(float);
当调用manip(3.14)时,编译器会拒绝做出选择,因为类型转换并没有优先级之分。
从double到float,和从double到long,是一样的。

如果参数被const修饰,那么编译器会根据参数是否为const来决定重载哪个函数。

----------------
当然,设计良好的系统,不应该让编译器产生困惑。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条