我有类似的代码:
class Pair{
public:
Pair(const void *blob);
//...
int cmp(const std::string &key) const;
int cmp(const Pair &pair) const;
}
稍后如果我这样做:
Pair p = ...;
p.cmp("Hello");
它不会编译,因为从 const char *
的转换是不明确的。
可以翻译成std::string
和cmp(std::string)
来调用,或者...
可以翻译成Pair
和cmp(const Pair)
来调用。
我不能做构造函数explicit
。
我尝试过:
Pair(const char *blob) = deleted;
但是我不能用 nullptr
构造类,我希望能够这样做。
作为最终解决方案,我定义了以下方法:
int cmp(const char *key) const{
return cmp( std::string{ key } );
}
而且效果很好。
是否有更好的方法来处理此类转换?
最佳答案
我觉得你的“最终解决方案”非常好。不构建临时也将有助于提高性能。如果已知您的字符串不包含 NUL 字符,则可以实现以 std::string
作为参数的版本
inline int
cmp(const std::string& s)
{
return this->cmp(s.c_str());
}
这太简单了,不用担心。
使 Pair
的构造函数 explicit
(我认为“implicit
”是一个打字错误)对我来说也是个好主意。为什么你做不到?
关于c++ - 处理模棱两可的类型转换/转换 C++11 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573556/