gpt4 book ai didi

c++ - 在模板参数推导中, sqrt(complex) 如何匹配 sqrt() 函数调用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:00:33 28 4
gpt4 key购买 nike

template<class T> T sqrt (T);
template<class T> complex<T> sqrt(complex<T>);
double sqrt(double);
void f(complex<double> z)
{
sqrt(z);
}

在这段代码中,sqrt<double>(complex<double>) 是怎么做到的?最终成为候选人模板参数推导?作者说任何匹配 sqrt<T>(complex<T>) 的电话也匹配 sqrt<T>(<T>) .怎么办?

代码来自 The C++ Programming Language,作者是 Bjarne Stroustrup。 13.3.2节

最佳答案

嗯,z类型为 complex<double> .与 T正在double很明显匹配

template <typename T> complex<T> sqrt(complex<T>);

此外,还有 T正在complex<double>它匹配

template <typename T> T sqrt(T);

这哪里有问题?

作为匹配这两个函数的结果,用于决定使用哪个函数的重载集由两个实例化组成

complex<double> sqrt<double>(complex<double>)
complex<double> sqrt<complex<double>>(complex<double>)

两者都匹配,但第一个更特殊,因此由重载决议选择。

关于c++ - 在模板参数推导中, sqrt<T>(complex<T>) 如何匹配 sqrt<T>(<T>) 函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12948897/

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