gpt4 book ai didi

c++ - 在 C++ 中使隐式转换运算符优于另一个

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:51 27 4
gpt4 key购买 nike

我更喜欢某个隐式转换序列而不是另一个。我有以下(大大简化的)类和函数:

class Whatever {...}

template <class T>
class ref
{
public:

operator T* ()
{
return object;
}

operator T& ()
{
return *object;
}

T* object;
...
};

void f (Whatever*)
{
cout << "f (Whatever*)" << endl;
}

void f (Whatever&)
{
cout << "f (Whatever&") << endl;
}

int main (int argc, char* argv[])
{
ref<Whatever> whatever = ...;
f(whatever);
}

当我有一个 ref 对象并且我正在对 f 进行模棱两可的调用时,我希望编译器选择涉及 T& 的那个。但在其他明确的情况下,我希望隐式转换保持不变。

到目前为止,我已经尝试引入一个中间类,ref 可以隐式转换为该类,并且具有到 T* 的隐式转换运算符,因此转换序列会更长。不幸的是,它在明确的情况下没有认识到它确实可以转换为 T*。当中间类有一个(n 隐式)构造函数时,同样的事情发生了。难怪,这个版本与 ref 完全无关。

我还尝试制作一个隐式转换运算符模板,结果相同。

最佳答案

两次转化之间没有“排名”;两者都同样好,因此过载是不明确的。这是您无法更改的语言的核心部分。

但是,您可以通过显式转换来指定您想要的重载:

f((Whatever&) whatever);

关于c++ - 在 C++ 中使隐式转换运算符优于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327000/

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