C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 非const指针优先于const T和重载const T *大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个函数重载
template <typename T>
void f(const T&) {
    cout << "f(T&)" << endl;
}

template <typename T>
void f(const T*) {
    cout << "f(T*)" << endl;
}

为什么f(new int)解析为f(const T&)而不是f(const T *)?在标准的任何地方谈论这种反直觉的行为?

http://ideone.com/kl8NxL

解决方法

对于使用模板扣除的重载分辨率,第一步是解析模板.然后将非模板排序应用于结果.在您的代码中,模板分辨率为:
void f(int * const &)   // 1

void f(int const *)     // 2

根据C14 [over.ics.ref],如(1)中直接引用参数的引用是一个身份转换(即使添加了cv-qualifiers). T与T const&是直接约束,即没有创建和绑定临时的.

但是,(2)涉及资格转换.在匹配函数参数之前,参数类型int *必须转换为const int *.

身份转换被认为是任何非身份转换序列的子序列,所以(1)根据子序列规则[over.ics.rank] /3.1.1获胜

大佬总结

以上是大佬教程为你收集整理的c – 非const指针优先于const T和重载const T *全部内容,希望文章能够帮你解决c – 非const指针优先于const T和重载const T *所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: