缺省构造作为函数参数缺省值的优化

我们经常在看到这样的函数声明:
int f(double,MyClass=MyClass());
不仅是我们写的代码,std库中也经常这样写。
仔细想想,如果这个函数多次使用这个缺省值那就会调用多次构造函数,这样一来效率就降低了。
下面是我针对,这中情况写的一个Zero模板。
Zero只有一个可用的接口就是value,value()会返回默认值。
其中还对基本数值类型进行了特别优化,这样只是为了全面,如果直接用0也是一样的。
这个东西的缺点是不能提供自己的值,只能用T()。
主要原因是因为template使用的 引用或指针只能用全局对象。
如果有全局对象那还不如直接用那对象哪。

下面我的Zero.hpp文件内容:
 
#ifndef ZERO_PIBOYE_HPP
#define ZERO_PIBOYE_HPP
//Author:piboye
//Created Date: 2005,12,29

namespace piboye
{
 template <typename T>
 class Zero
 {
 private:
  static T const c_value;
 public:
  static inline T const & value() {return c_value;}
 };
 template <typename T>
 T const Zero<T>::c_value=T();

 //辅助特化宏
 #define MSpecZero(T,val) /
 template <> /
 class Zero<T> /
 {/
 public: /
  static inline T value() {return val;}/
 };
//基本类型特化
 MSpecZero(int,0)
 MSpecZero(short,0)
 MSpecZero(long,0)
 MSpecZero(char,0)
 MSpecZero(unsigned int,0)
 MSpecZero(unsigned short,0)
 MSpecZero(unsigned long,0)
 MSpecZero(unsigned char,0)
 MSpecZero(float,0.0f)
 MSpecZero(double,0.0)
 MSpecZero(long double,0.0l)
}
#endif //ZERO_PIBOYE_HPP

使用方法:
int f(double,MyClass=Zero<MyClass>::value());

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值