gpt4 book ai didi

c++ - 处理模棱两可的类型转换/转换 C++11 的正确方法是什么

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:16 24 4
gpt4 key购买 nike

我有类似的代码:

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::stringcmp(std::string)来调用,或者...

可以翻译成Paircmp(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/

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