gpt4 book ai didi

C++模板函数重载

转载 作者:太空狗 更新时间:2023-10-29 20:07:55 24 4
gpt4 key购买 nike

以下是“c++ 编程语言”中的几行

template<class T > T sqrt(T );
template<class T > complex<T> sqrt(complex<T>);
double sqrt(double);
void f(complex<double> z )
{
s q r t (2 ); // sqrt<int>(int)
sqrt(2.0) ; // sqrt(double)
sqrt(z) ; // sqrt<double>(complex<double>)
}

我不明白为什么 sqrt(z) ;电话 sqrt<double>(complex<double>)任何人都可以解释一下。

作者说, T sqrt<complex<T>>T sqrt <T> 更专业但是有一个单独的声明 template<class T > complex<T> sqrt(complex<T>);为什么不用那个?

最佳答案

事后看来,如果 Bjarne 将其写成

template<class T> T sqrt(T);
template<class U> complex<U> sqrt(complex<U>);
double sqrt(double);
void f(complex<double> z )
{
sqrt (2); // sqrt<int>(int)
sqrt(2.0) ; // sqrt(double)
sqrt(z) ; // sqrt<double>(complex<double>)
}

这样您就不会被所有不同的 T 弄糊涂了。但是这个想法很简单; C++ 找到最佳匹配。存在三种可能的功能。前两个是完美匹配(无需转换),因此忽略非模板版本。现在,我们有 T=complex 和 U=double。选择哪个版本? Bjarne 解释说这里选择了第二个模板,因为它更专业。这意味着对于任何类型 U,都有一个类型 T=complex<U>这使得两个模板的签名相同。

关于C++模板函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/217901/

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