gpt4 book ai didi

c++ - 非常量指针更喜欢 const T& 重载而不是 const T*

转载 作者:可可西里 更新时间:2023-11-01 16:34:10 26 4
gpt4 key购买 nike

假设我有两个函数重载

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

根据 C++14 [over.ics.ref],在 (1) 中直接绑定(bind)到参数的引用是一个身份转换(即使添加了 cv 限定符) . TT const & 的绑定(bind)是直接绑定(bind),即没有创建和绑定(bind)临时对象。

但是,(2) 涉及资格转换。参数类型 int * 必须转换为 const int * 才能匹配函数参数。

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

关于c++ - 非常量指针更喜欢 const T& 重载而不是 const T*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263029/

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