以下是"c ++编程语言"中的行
templateT sqrt(T ); template complex sqrt(complex ); double sqrt(double); void f(complex z ) { s q r t (2 ); // sqrt (int) sqrt(2.0) ; // sqrt(double) sqrt(z) ; // sqrt (complex ) }
我不明白为什么sqrt(z); 电话sqrt
可以任何机构请解释.
作者说,
T sqrt
比较专业,T sqrt
但有一个单独的声明,template
为什么不使用它?
事后来看,如果Bjarne将其写成,那将会更容易
templateT sqrt(T); template complex sqrt(complex); double sqrt(double); void f(complex z ) { sqrt (2); // sqrt (int) sqrt(2.0) ; // sqrt(double) sqrt(z) ; // sqrt (complex ) }
所以你不要被所有不同的T弄糊涂.但这个想法很简单; C++找到最佳匹配.有三种可能的功能.前两个是完美匹配(不需要转换),因此忽略非模板版本.现在,我们有T = complex和U = double.选择哪个版本?Bjarne解释说这里选择了第二个模板,因为它更专业.这意味着对于任何类型U,存在T=complex
使两个模板的签名相同的类型.