【问题标题】:c++: implicit conversion orderc++:隐式转换顺序
【发布时间】:2015-08-12 02:11:59
【问题描述】:

我有一个像这样重载的(成员)函数:

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

适用于几个内置类型,但不适用于const char*。调用foo("beauty is only skin-deep");,令我大吃一惊的是,调用了 foo 函数的布尔变量。这引出了我的问题:

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

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

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

【问题讨论】:

  • 一次应该是1个问题,所以你可以只选择一个

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


【解决方案1】:

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

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

pointer -> bool 是一个“布尔转换”(if(pointer) 表示法需要),最后一个“数字转换”

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多