函数模板问题

今天在csdn论坛碰到个问题

#include

using namespace std;

template

 void min(const type array[size])

{cout<<array[2];

cout<<endl;

cout<<"the size of it:"<<size;

}

 

void main( )

{int a[]={1,3,4,5,6,7,9};

min(a);

}

 

这个程序在VC6中有错误,由于mina)中size不能推演出来。

 

这个模板函数是min(const type array[size]),这个参数写好一点其实是:const type*arraymin(a)实例化的时候,在模板推演中用了两个转换,一个是左值转换,一个是限定修饰符转换。从 int a[] à int *a à const int *a 。显然,参数传递的是仅是指针,这样是无法知道数组的大小的。

 

有两种方法解决:

1.用显式模板实参

min (a);

 

2. 改写模板函数声明

1)  void min(const type *array, int size)

实例化: min(a,7);

2)  void min(type (&array)[size])  // 这里不能写const type (&array)[size],因为这个与实参int (a)[] 不是同一类型,无法匹配

实例化: min(a)

 

 但我发现2)虽然符合标准(用gcc可以编译通过),但不能被VC6编译通过,有一个错误:

 error C2265: ' ' : reference to a zero-sized array is illegal

 

这个有点费解。 越来越发现VC6真的不怎么符合C++标准,有点失望。然而庆幸的是,在VC7中可以无错编译 :)

 

 

                                                                                                                                                            2004-8-21

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值