gpt4 book ai didi

c++ - 传递 const 类型地址时模板参数推导失败

转载 作者:IT老高 更新时间:2023-10-28 22:37:03 33 4
gpt4 key购买 nike

template <typename T>
T go(T a, T *b){ T *t; return *t;}

int main() {
const int x = 10;
go(x, &x);
return 0;
}

给出编译器错误:

error: no matching function for call to ‘go(const int&, const int*)’

为什么第一个参数是引用类型const int&而不仅仅是const int ?

为了修复这个编译错误,我通过指定参数类型来覆盖编译器推导过程 go<const int>(x, &x); ,但为什么我需要这样做?

最佳答案

这是类型推导的冲突。 T 从第一个参数推导出为 int,从第二个参数推导出为 const int。因此类型推导失败(并且编译器会显示一条消息,可能会或可能不会明确根本原因)。

如果你想让这个函数工作而不必显式指定模板参数,你可以让它只有第二个函数参数驱动推导:

template <class T>
struct NonDeduced { using type = T; }

template <class T>
T go(typename NonDeduced<T>::type a, T *b) { T *t; return *t; }

这样,T将只能从第二个参数推导出来,而第一个参数将使用推导出来的T而无需修改。

关于c++ - 传递 const 类型地址时模板参数推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300736/

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