C ++函数重载决议 - bool vs string

时间:2014-06-26 20:38:59

标签: c++ overload-resolution

我发现了使用带有函数重载的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)

有人可以向我解释为什么第二个调用解析为布尔函数,以及以这种方式解决的动机是什么?

1 个答案:

答案 0 :(得分:2)

“什么?”的类型是char const[6],在传递给函数后衰减到char const*后,可以隐式转换为bool。标准转换优先于用户定义的隐式转换,例如将char const*转换为std::string的情况。