STL里的继承开销

      在STL里面有存在很多的继承,特别是在我看的仿函数里面更是将继承用到了淋漓尽致。
      如下在STL里面定义的一元函数对象。
1/*以下定义基类-----一元函数对象和二元函数对象*/
2template <class _Arg, class _Result>
3struct unary_function {
4  typedef _Arg argument_type;
5  typedef _Result result_type;
6}
;
      取负操作的代码如下,它继承了以上定义的一元函数对象
1/*****************继承一元函数对象,取负操作*************/
2template <class _Tp>
3struct negate : public unary_function<_Tp,_Tp> 
4{
5  _Tp operator()(const _Tp& __x) const return -__x; }
6}
      但是这些开销如何呢?这是我首先考虑的问题。如下就对相关的问题进行了测试。
 1/*
 2*设计思路:验证STL中的继承开销比较少。
 3*/

 4
 5#include <iostream>
 6#include <functional>
 7using namespace std;
 8int main()
 9{
10cout<<sizeof(binary_function<int,int,int>)<<endl;//binary_function的大小为1
11cout<<sizeof(plus<int>)<<endl;//继承binary_function的plus的大小仍然为1
12    return 0;
13}
        结果输出都为1,证明继承的开销为0.

       经过测试,如果在继承于binary_function的子类里定义一整型变量,其大小为4(在32位机器上测试),证明如果有类成员的话,基类所占用的1字节也节省了。

        以上证明STL里面的继承开销为0(继承空类不需要开销)。


        但是,我也存在如下的疑问,即基类的那一个字节存储的是什么呢?

posted on 2009-02-28 19:57 蒋梦翔 阅读(234) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理


导航

<2026年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(1)

随笔档案

文章档案

搜索

最新评论