我发现了使用带有函数重载的VC ++ 2010编译器的一些意外行为:
struct A {
A();
void O(const bool in); //(1)
void O(const std::string in);//(2)
}
以下某些电话无法像我想的那样解决:
A a;
a.O(true);//calls (1)
a.O("what?");//calls (1)
a.O(std::string("better..."));//calls (2)
有人可以向我解释为什么第二个调用解析为布尔函数,以及以这种方式解决的动机是什么?
答案 0 :(得分:2)
“什么?”的类型是char const[6]
,在传递给函数后衰减到char const*
后,可以隐式转换为bool
。标准转换优先于用户定义的隐式转换,例如将char const*
转换为std::string
的情况。