模板实参推断

来源:互联网 发布:java输出10位小数 编辑:程序博客网 时间:2024/05/01 01:26

对于函数模板,编译器利用调用中的函数实参来确定其模板参数。从函数实参来确定模板实参的过程被称为模板实参推断(template argument deduction)。在模板实参推断过程中,编译器使用函数调用中的实参类型来寻找模板实参,用这些模板实参生成的函数版本与给定的函数调用最为匹配。

类型转换与模板类型参数
如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则。只有很有限的几种类型转换会自动地应用于这些实参。编译器通常不是对实参进行类型转换,而是生成一个新的模板实例。

在其他类型转换中,能在调用中应用于函数模板的包括以下两项:
1。const转换:可以将一个非const对象的引用(或指针)传递给一个const的引用(或指针)形参。
2。数组或函数指针转换:如果函数形参不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换。一个数组实参可以转换为一个指向其首元素的指针。类似的,一个函数实参可以转换为一个该函数类型的指针。
而其他类型的转换,如算术转换、派生类向基类的转换以及用户自定义的转换,都不能应用于函数模板。

将实参传递给带模板类型的函数形参时,能够自动应用的类型转换只有const转换及数组或函数到指针的转换。

使用相同模板参数的函数形参
一个模板类型参数可以用作多个函数形参的类型。由于只允许有限有几种类型转换,因此传递给这些形参的实参必须具有相同的类型。

正常类型转换应用于普通函数实参
函数模板可以有用普通类型定义的参数,即,不涉及模板类型参数的类型。

0 0