gpt4 book ai didi

C++ 重载解析、用户定义转换和函数模板

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:44 24 4
gpt4 key购买 nike

对于 g++ 3.4 和 4.7,我观察到以下奇怪的行为:

如果需要用户定义的转换,则函数模板不匹配,而普通函数会。我在 C++98 标准中找不到相应的规则。 g++ 是否正确(正如我假设的那样)?或者这是一个错误?

template <class T>
int x(auto_ptr_ref<T> p)
{
return 1;
}
// this would match
/*
int x(auto_ptr_ref<int> p)
{
return 2;
}
*/
void dummy()
{
cout << x(auto_ptr<int>()) << endl;
}

最佳答案

海湾合作委员会是正确的,template argument deduction不考虑隐式转换。

Type deduction does not consider implicit conversions (other than type adjustments listed above): that's the job for overload resolution, which happens later.

对于您的代码,auto_ptr_refauto_ptr 不匹配,模板参数T 的推导失败,因此函数模板x() 根本不会被考虑用于重载决议。

关于C++ 重载解析、用户定义转换和函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451195/

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