struct A
{
void fn(double a) const {}
void fn(int a){}
};
int main()
{
A().fn(1.);
}
对于上面提到的函数,为什么编译器会产生歧义;两种类型都不同。
答案 0 :(得分:1)
为什么要将int
仅传递给非常量A
?
每个成员函数有两个参数this
和a
。因此,const A*
需要this
,double
需要a
,非A*
和int
需要A
。
并且调用与其他任何选项都不完全匹配,因为您有非const double
和A()
。因此编译器可以将const A
转换为double
,或将int
转换为#include <boost/spirit/home/x3.hpp>
#include <iostream>
namespace x3 = boost::spirit::x3;
template <typename... Args>
auto negate(Args&&... p) {
return +(x3::char_ - x3::char_(std::forward<Args>(p)...));
};
int main() {
std::string input("all the king's men and all the king's horses"), parsed;
if (parse(input.begin(), input.end(), negate("horse"), parsed))
std::cout << "'" << input << "' -> '" << parsed << "'\n";
}
。它无法决定哪个是最好的。