- 论坛徽章:
- 1
|
1>;
P430:
template < typename Type>;
Type sum ( Type * , int );
template < typename Type>;
Type sum ( Type , int );
int ia[1024];
int ival1 = sum < int >; ( ia , 1024 );
举此例之前有:(书中原文):“即使对于一个函数调用,两个不同的函数模板都可以实例化,但该函数调用 仍然不是二义的”。然后举了上述例子加以说明。
我认为 sum 函数调用只能用第一个模板产生实例,第二个模板并不是它的“可行函数”,而上述一段话中为什么又讲这两个不同的函数模板都可以实例化呢?
2>;
template < class Type>;
Type sum (Type , int ) { }
template < >; double sum <double>; ( double , int );
void manip ( double ii, double dd )
{
sum ( dd, ii);
}
如果有一个普通函数(没有模板函数)如:double sum (doluble , int );
则 sum ( dd, ii);会被调用,ii 被转化为 int ,上述模板的特化也能同样被调用吗(有或没有普通函数的两种情况下)?如果是调用 " sum <double>; ( dd, ii) // 显示模板实参 " 呢?
3>;
P433:
template <class T>; T min ( T, T);
int min ( int , int ) { }
int ai[4] = { 0 };
int main () {
min (ai[0], 99 ); }
// 这样的调用不是二义的, 因为非模板函数存在时,因为该函数被显示实现,所以它被给予更高的优先级。 (这一句话是书上原文)
P435:
template < class Type>;
Type max ( Type , Type ) { .. . . }
double max (double , double );
int main () {
double dval;
max ( 0.25, dval );
}
//因为调用两个函数都完全匹配,所以该调用存在二义。( 引用书上原文)
问题:为什么一个有二义,一个没有二义?它们是一样的意思啊。
虽然最后调用的都是普通函数,但为什么一个有二义,一个没有呢? |
|