学会适当的初始化模版数据

ZDNet软件频道 时间:2003-12-01 作者:ZDNet China |  我要评论(1)
本文关键词:模版 cpptips
当你例示一个特殊化的模版的时候,模版的参数被已经定义的用户名或者内置类型取代。为了说明这个问题,下面让我们来看看模版元函数和它的参数。
本文译自Builder.com,未经许可请勿转载

当你例示一个特殊化的模版的时候,模版的参数被已经定义的用户名或者内置类型取代。为了说明这个问题,让我们来看看下面的模版元函数和它的参数,T:

void dynarray <T>::resize (int sz)
{
   T t; // problematic if T is a built-in type
   if (sz > size())
     insert(end(), sz - size(), t);
   else
  // ..
}

这个代码有一个隐错,如果T碰巧是内置类型,那么局部对象t将会有一个不确定的值,无论是否会出现这样的状况,T作为一个类,它有一个用户定义的默认的构造函数,这样就使得t在合适的时候被初始化。我们为了确定一致性就先不管t的真实类型,将resize()第一行改成下面这种形式。

T t = T();

如果T是内置类型,这样做就可以保证t被初始化为0。如果它是一个类,它默认的构造函数会初始化对象t。就性能方面来说,我们可以参考下面的语句。当T是一个类的时候,下面的t的声明在语意上和上面的例子是等价的:

T t = T(); //no extra overhead compared
             //to the following declaration:

T t;

当T是内置类型的时候,它们就有区别。


本文作者Danny Kalev 是一个系统分析家、软件工程师,在C++和面向对象设计方面有着14年的专业经验。




责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134