【发布时间】:2014-09-12 15:13:33
【问题描述】:
假设我有这个程序:
#include <iostream>
int fun(...) {return 0;}
template <typename... Args>
int fun(const Args&...) {return 1;}
int fun(const double val) {return 2;}
int main()
{
std::cout << fun(1,2,3) << fun(1) << fun(1.0);
return 0;
}
此程序返回以下内容:
112
我明白为什么fun(1.0) 会返回2,因为这是最接近匹配的候选函数,但为什么前两个示例返回1?
此页面 (http://en.cppreference.com/w/cpp/language/overload_resolution) 提供了函数重载规则的参考,但似乎没有涵盖可变参数。在哪里可以找到可变参数/模板可变参数函数的重载规则?
【问题讨论】:
-
一般来说,它是特定类型(
double),后跟模板类型。1不是double,所以它与Args中的int匹配。 -
从 [over.match] 开始的 20 页有趣的内容涵盖了这一点
标签: c++