中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何淺析C++仿函數的基本概念

發布時間:2021-10-27 18:49:35 來源:億速云 閱讀:117 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何淺析C++仿函數的基本概念,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

C++編程語言為我們帶來了非常大的好處。不過即使是我們經常使用的功能也有很多比較高深的內容值得我們去深入的探討。在這里我們將會為大家詳細介紹一下C++仿函數的基本概念,方便大家對這一語言的解讀。

C++仿函數這個詞經常會出現在模板庫里(比如 STL),那么什么是仿函數呢?

顧名思義:仿函數就是能像函數一樣工作的東西,請原諒我用東西這樣一個代詞,下面我會慢慢解釋。

void dosome( int i )

這個 dosome 是一個函數,我們可以這樣來使用它: dosome(5);

那么,有什么東西可以像這樣工作么?

答案1:重載了 () 操作符的對象,比如:

struct DoSome   {   void operator()( int i );   }   DoSome dosome;

這里類(對 C++ 來說,struct 和類是相同的) 重載了 () 操作符,因此它的實例 dosome 可以這樣用 dosome(5); 和上面的函數調用一模一樣,不是么?所以 dosome 就是一個C++仿函數了。

實際上還有答案2:

函數指針指向的對象。

typedef void( *DoSomePtr )( int );   typedef void( DoSome )( int );   DoSomePtr *ptr=&func;   DoSome& dosome=*ptr;   dosome(5); // 這里又和函數調用一模一樣了。

當然,答案3 成員函數指針指向的成員函數就是意料之中的答案了。

C++仿函數的用處

不管是對象還是函數指針等等,它們都是可以被作為參數傳遞,或者被作為變量保存的。因此我們就可以把一個仿函數傳遞給一個函數,由這個函數根據需要來調用這個仿函數(有點類似回調)。

STL 模板庫中,大量使用了這種技巧,來實現庫的“靈活”。 比如: for_each, 它的源代碼大致如下:

template < typename Iterator, typename Functor >   void for_each( Iterator begin, Iterator end, Fucntor func )   {   for( ; begin!=end; begin++ )   func( *begin );   }

這個 for 循環遍歷了容器中的每一個元素,對每個元素調用了仿函數 func,這樣就實現了 對“每個元素做同樣的事”這樣一種編程的思想。 特別的,如果仿函數是一個對象,這個對象是可以有成員變量的,這就讓C++仿函數有了“狀態”,從而實現了更高的靈活性。

上述就是小編為大家分享的如何淺析C++仿函數的基本概念了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

金沙县| 宁蒗| 米泉市| 垣曲县| 灵台县| 鄂伦春自治旗| 定西市| 南木林县| 浦城县| 屏东县| 枣阳市| 莫力| 砀山县| 冷水江市| 高淳县| 文登市| 广南县| 玛纳斯县| 兴山县| 西林县| 霸州市| 永顺县| 车致| 岳阳县| 遵义县| 雅江县| 六枝特区| 德江县| 夏津县| 宁阳县| 建瓯市| 额敏县| 晋州市| 威远县| 连江县| SHOW| 新昌县| 博湖县| 赫章县| 太湖县| 五台县|