STL学习笔记--临时对象的产生与运用

所谓的临时对象,就是一种无名对象(unnamed objects)。它的出现如果不在程序员的预期之下,往往造成效率上的负担。但有时刻意制造一些临时对象,却又是使程序干净清爽的技巧。刻意制造临时对象的方法是,在型别名称之后直接加一对小括号,并可指定初值,例如shape(3,5)或int(8),其意义相当于调用相应的constructor且不指定对象名称。STL最常将此技巧应用于仿函数(functor)与算法的搭配上,例如:

#本例测试仿函数用于for_each()的情形

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

template <typename T>
class print
{
    public:
        void operator()(const T& elem)
        { cout << elem << ' '; }
};

int main()
{
      int ia[6] = {0, 1, 2, 3, 4, 5 };
      vector<int> iv(ia, ia+6);
      
      // print<int>()是一个临时对象, 不是一个函数调用操作
      for_each(iv.begin(), iv.end(), print<iint>());
    
//
    cout << endl; }

最后一行便是产生“class template具现体”print<int>的一个临时对象。这个对象将被传入for_each()之中起作用。当for_each()结束时,这个临时对象也就结束了它的生命。

------

仿函数(functor)的解释:使用起来像函数一样的东西,如果你针对某个class进行operator()重载,它就成了一个仿函数。

 

-----

[yangtze@contex201 ~]$ uname -a
Linux contex201 3.2.2-1.2 #65 SMP Wed Jul 4 19:49:25 CST 2012 x86_64 x86_64 x86_64 GNU/Linux
[yangtze@contex201 ~]$ g++ tmp_object.cpp
[yangtze@contex201 ~]$ ./a.out
0 1 2 3 4 5
[yangtze@contex201 ~]$

posted @ 2014-02-23 22:26  艾丽娅的猫  阅读(255)  评论(0编辑  收藏  举报