说说泛型

19 篇文章 1 订阅

说说泛型

Author:zfive5(zhaozi)

Email : zfive5@yahoo.com.cn

引子

 
关于一位埃及伟大法老王的都城,以前考古学家一直认为在尼罗河三角洲东北部某一处,那里有那个伟大法老王在位时期的建筑残骸,结果最近证实是在东北部的另一处农田下,以前认为的地方是旧城断流荒废后,全城迁移过去的 ……
 
泛型
 
泛型从学 c++ 的时候就接触使用, 那时起认为泛型是为了实现代码( ANSI )算法的复用出现的,这样的观念一直持续了很久,在 .net 加入泛型机制时,还一段时间认为既然都是 object ,还为什么要有它,最近用的、看的 .net c# 比较多,也逐渐关注 .net 本身一些语言特性,发现以前的认识的确是片面的,在 c# (第 5 版)里关于讲解泛型的部分,第一条讲的就是性能,呜呼,恍然大悟,装箱和拆箱,的确如果考虑到它,那真的是有泛型的可以让 for each 里的可以减少许多 il 指令,这可以在 idasm 里看 il 得到验证。关于泛型的特性还有就是代码的扩展,值类型的 JIT 生成多套代码,引用类型就可以使用一套代码(引用类型的就是一个指针)。关于这条 c++ 也是这样处理,大家完全可以从下面的例子得到验证,其实细想一下也的确是这样,函数调用时 push 和使用时的 [bp+n] 在不同大小的参数时候就是不一样的,共享的部分也只有代码( ANSI )和算法了。剩下的类型检查不用多说,一看 C# 5 版就明白了,其它的特性感觉没有什么实质的东西了。
 
代码(VS2005,VC++):
 
#include "stdafx.h"
template <typename A>
void Sample(A para)
{
   static int s=0;
   s=s+1; 
   printf("s=%d/r/n",s);
   return;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
   void *p1=NULL;
   void *p2=NULL;
   Sample<int>(1);
   Sample<float>(10.1);
   Sample<int>(1);
   Sample<float>(10.1);
   p1=Sample<int>;
   p2=Sample<float>;
   printf("p1=%p/r/n",p1);
   printf("p2=%p/r/n",p2);
 
   return 0;
}
 
 

图示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值