c ++:隐式转换顺序

时间:2015-05-29 09:15:50

标签: c++ language-lawyer implicit-conversion

我的(成员)功能像这样重载:

bool foo(bool);
int foo(int);
float foo(float);
...
std::string foo( std::string const&);

用于几种内置类型,但不适用于const char*。调用foo("beauty is only skin-deep");,令我大惊小怪,称为foo函数的bool变体。这导致了我的问题:

问题:是否为内置类型定义了明确的隐式转化订单

不是问题:如何避免隐式转化。隐含转换是多么邪恶。 ...

编辑:删除了有关用户定义问题的隐式转化顺序的问题

1 个答案:

答案 0 :(得分:7)

根据:http://en.cppreference.com/w/cpp/language/implicit_cast

所有内置转化都发生在用户定义的转化之前

指针 - > bool是一种布尔转换' (if(指针)表示法需要),数字转换的最后一个'

' const char *' - > std :: string是用户定义的转换'从语言的角度来看,std :: string是用户定义的类型。

不幸的是,最简单的解决方案是编写适当的fun过载(const char *),或者避免fun(bool)vs fun(std :: string)重载