与非模板函数一样,我们在一次调用中传递给函数模板的实参被用来初始化函数的形参。如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则。只有很有限的几种类型转换会自动地应用于这些实参。编译器通常不是对实参进行类型转换,而是生成一个新的模板实例。
与往常一样,顶层 const(参见 2.4.3节,第57页)无论是在形参中还是在实参中,都会被忽略。在其他类型转换中,能在调用中应用于函数模板的包括如下两项。
-
const 转换:可以将一个非const对象的引用(或指针)传递给一个const的引用(或指针)形参(参见4.11.2节,第144页)。
-
数组或函数指针转换:如果函数形参不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换。一个数组实参可以转换为一个指向其首元素的指针。类似的,一个函数实参可以转换为一个该函数类型的指针(参见4.11.2节,第143 页)。
其他类型转换,如算术转换(参见 4.11.1节,第142页)、派生类向基类的转换(参见 15.2.2节,第 530 页)以及用户定义的转换(参见7.5.4节,第263 页和14.9节,第 514页),都不能应用于函数模板。
其他类型转换,如算术转换(参见 4.11.1节,第142 页)、派生类向基类的转换(参见 15.2.2节,第 530 页)以及用户定义的转换(参见 7.5.4节,第 263 页和 14.9节,第514页),都不能应用于函数模板。
Note
- 将实参传递给带模板类型的函数形参时,能够自动应用的类型转换只有const转换及数组或函数到指针的转换。
- 如果函数参数类型不是模板参数,则对实参进行正常的类型转换:
源自:《C++ Primer》 P601
标签:类型转换,转换,函数,C++,实参,模板,参见 From: https://www.cnblogs.com/huvjie/p/18534951