gpt4 book ai didi

C++:隐式转换顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:12 27 4
gpt4 key购买 nike

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

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

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

pointer -> bool 是一个“ bool 转换”(if(pointer) 符号需要),最后一个“数字转换”

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

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

关于C++:隐式转换顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com