所謂臨時對象,想必很多學程式設計語言的人都會很有感受,這些臨時對象有時候讓你覺得不可思議,有時候又讓你覺得十分的痛恨,這些臨時對象如果不在自己的預期之內,將會造成效率上面的一些負擔,例如常常見到的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中的元素....