繁体   English   中英

c ++:隐式转换顺序

[英]c++: implicit conversion order

我有一个(成员)功能重载像这样:

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变体。 这引出了我的问题:

问题:是否为内置类型定义了明确的隐式转换顺序

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

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

根据: 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)重载

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM