|
1>
typedef int (& rai)[10];
template <class T >
T min ( T ( &arr)[10] );
int array[10]={0};
min ( array );
问题:a> 第一个typedef是声明 rai 为有十个 int 型元素的数组的引用吗?为什么是这样声明呢?总是习惯 typedef int I ; 之种形式的。
b> 模板函数的参数为数组的引用,实参应该给个数组吧?而我们传给它的是数组名,一个指针,如何解释呢?照我理解直接传个 array[10] 为何不可呢?
c> 顺便问一下,一个普通函数以数组的引用为开参,如何专给它实参呢?具体作何理解或解释?
2>
C++ PRIMER
P418。
template <class T1, class T2, class T3>
T1 sum ( T2, T3);
typedef unsigned int ui_type;
P419:
ui_type (*pf) (char , ui_type) = & sum < ui_type >;
问题:
为什么我不可能直接用:ui_type (*pf) (char , ui_type) = & sum ;
呢?因为我认为 (*pf)前面的 ui_type 说明了这个指针指向的函数的返回类型,所以编译器可以根据这个来推演出模板参数 T1 ,然后生成实例。
而不用 &sum <ui_type> 用<ui_type>来显示模板参数化来指明 T1。不是吗?
3>
P412:
template <teypename Type, int size>
Type min (Type ( &r_array) [size]
{ }
int ia[ ] = { 10, 7 , 8, 9, 4 };
......................
#include <iostream>
int main ()
{
..............
int i = min ( ia );
..............
}
P414:
template <class Type, int size >
Type min (Type ( &r_array)[size] )
{ }
void f (int pval[9] )
{
// 错误: Type (&)[ ] != int *
int jval = min ( pval );
}
问题:
这两个例子不是一样的吗?为什么一个错误一个没有?
为什么它说 pval 是 int * 型,而不是 int 型数组类型。那 p412 的那个例子为什么不是一样的吗?怎么解释? |
|