關於臨時對象的一些討論

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.