• 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 ~]$

  • 相关阅读:
    源代码的下载和编译
    Git使用入门
    搭建Android开发环境
    安卓系统移植与驱动开发概述
    第十章
    第九章
    第八章
    第七章读书笔记
    第六章读书笔记
    第五章读书笔记
  • 原文地址:https://www.cnblogs.com/yangtze736-2013-3-6/p/3563734.html
Copyright © 2020-2023  润新知