《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2
上一篇請(qǐng)見(jiàn)可能令你困惑的C++語(yǔ)法1
現(xiàn)在繼續(xù),
2.臨時(shí)對(duì)象的產(chǎn)生和運(yùn)用
臨時(shí)對(duì)象,是一種無(wú)名對(duì)象。制造臨時(shí)對(duì)象的方法是,在型別之后加一對(duì)小括號(hào),并可以給定初值,這樣就會(huì)調(diào)用響應(yīng)的constructor。在stl中,往往與仿函數(shù)一起使用,這樣為了使程序看起來(lái)干凈。
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);for_each(iv.begin().iv.end(),print<int>()); }3.靜態(tài)成員初始化問(wèn)題
靜態(tài)非const成員初始化,是在類定義內(nèi)聲明,類外定義時(shí)設(shè)定初值初始化;
靜態(tài)const成員初始化,在類定義內(nèi)直接初始化。
4.自增自減的前置與后置
C++中使用++和--,根據(jù)出現(xiàn)在對(duì)象的前面或者后面來(lái)進(jìn)行調(diào)用。其實(shí)是根據(jù)函數(shù)重載來(lái)實(shí)現(xiàn)的,當(dāng)編譯器看到++a時(shí),就調(diào)用operator++(a),當(dāng)看到a++時(shí),就調(diào)用operator(a,int)。這里編譯器為int傳遞一個(gè)啞元常量值(因?yàn)榇酥涤肋h(yuǎn)也不會(huì)被使用),用來(lái)給后綴產(chǎn)生不同的標(biāo)記。
使用示例如下,這是在類T中的代碼:
//prefix: increment and then fetch T& operate++(){++(this->i);// 成員變量遞增,不同T有不同表現(xiàn)return *this; } //postfix: fetch and then increment const T operator++(int){T temp = *this;++(*this);return temp; }5.stl中區(qū)間表示[ )
區(qū)間采用前閉后開(kāi)的表示方法。[first,last),包含的元素范圍為[first,last-1)。
6.仿函數(shù)
仿函數(shù)就是類似函數(shù)的結(jié)構(gòu)體或者類。要把某類當(dāng)做仿函數(shù)使用,類必須進(jìn)行operator()重載,這是就可以像使用函數(shù)一樣使用。
這里也加入第7章的內(nèi)容,記錄一下仿函數(shù)。
許多stl算法提供兩個(gè)版本,一個(gè)用于一般狀況,一個(gè)用于特殊狀況。在特殊狀況時(shí),需要用戶指定某個(gè)條件或者策略,而條件或者策略的背后由一整組操作構(gòu)成。
在stl中,這一整組操作就是指的仿函數(shù)。一般的函數(shù),如果當(dāng)做參數(shù)傳遞,只有通過(guò)函數(shù)指針,但是指針無(wú)法只有自己的狀態(tài),更重要的一點(diǎn)是函數(shù)指針不能滿足stl對(duì)抽象性的要求,所以達(dá)不到stl組件的可適配性。
仿函數(shù)根據(jù)函數(shù)參數(shù)可以分別為一元仿函數(shù)(unary_function)和二元仿函數(shù)(binary_function),用戶自定義仿函數(shù)必須繼承其中的一個(gè)。
下面是一元仿函數(shù)的參數(shù)型別和返回值類型,二元仿函數(shù)類似。
template <class Arg, class Result> struct unary_function{typedef Arg argument_type;typedef Result result_type; }根據(jù)功能分為算術(shù)類(Arithmetic)仿函數(shù)、關(guān)系運(yùn)算類(Rational)仿函數(shù)和邏輯運(yùn)算類(Logical)仿函數(shù),這些仿函數(shù)也都繼承自一元或者二元仿函數(shù)。
這里要清楚幾個(gè)概念,
證同元素,所謂“運(yùn)算op的證同元素”,即數(shù)值與某個(gè)元素做op運(yùn)算,會(huì)得到自己,則該元素則為該運(yùn)算符的證同元素。
證同函數(shù),任何數(shù)值通過(guò)此函數(shù)后,都不會(huì)有任何改變。
選擇函數(shù),接受一個(gè)pair,傳回第一個(gè)或者第二個(gè)值。
投射函數(shù),傳回一個(gè)參數(shù),忽略另外一個(gè)。
總結(jié)
以上是生活随笔為你收集整理的《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《STL源码剖析》学习-- 1.9--
- 下一篇: Effective C++ --1 让自