所谓临时对象,想必很多学编程语言的人都会很有感受,这些临时对象有时候让你觉得不可思议,有时候又让你觉得十分的痛恨,这些临时对象如果不在自己的预期之内,将会造成效率上面的一些负担,例如常常见到的pass by value就会引发copy操作,形成一个临时对象。
临时对象的定义,其实很简单,就是一种无名对象(unnamed objects).
有些时候我们需要这些临时对象,这里就会产生质疑,临时对象怎么产生,当然,回答很确定,临时对象的制造方法是:在型别名称之后直接加一对小括号,并且制定初值。例如int(10),它的意义就相当于调用相应的构造函数并且不指定对象的名称。
在标准模板库中,这种制造临时对象的方法最最常见的就是用在仿函数上面,下面给出一段代码,在VC6.0下进行编译通过并执行...
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
template<class T>
class PRINT
{
public:
void operator()(const T& elem)
{
cout<<elem<<endl;
}
};
void main()
{
int ia[5]={1,2,3,4,5};
vector<int> iv(ia, ia+5);
PRINT<int> it;
for_each(iv.begin(), iv.end(), PRINT<int>());
for_each(iv.begin(), iv.end(), it);
}
PRINT<int>()这个临时对象传入for_each()之中并在其中起作用,当这个函数结束时,这个临时对象的生命期也就到头了..
当然有些人看到for_each()这个函数定会有有些迷惑,这个函数做了什么,下面是它的源码,抠出来看看我想不用做过多的解释大家就会明白。
template<class _II, class _Fn> inline
_Fn for_each(_II _F, _II _L, _Fn _Op)
{
for(; _F != _L; ++_F)
{
_Op(*_F);
}
return (_Op);
}
for_each()函数依次打印iv中的元素....