C++ primer第六章6.7函数指针
生活随笔
收集整理的這篇文章主要介紹了
C++ primer第六章6.7函数指针
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)指針
- 函數(shù)指針指向的是函數(shù)而不是對象。和其他指針一樣,函數(shù)指針指向某種特定的類型。函數(shù)的類型由他的返回類型和形參類型共同決定,而與函數(shù)的名字無關(guān)。
- 要想聲明一個(gè)可以指向該函數(shù)的指針,只需要指針替換函數(shù)的名字即可
- pf的名字之前有一個(gè)* ,因此pf是指針;右側(cè)是形參的列表,表示pf指向的是函數(shù);觀察左側(cè),發(fā)現(xiàn)函數(shù)的返回?cái)?shù)值是bool類型的。因此,pf就是一個(gè)指向函數(shù)的指針,其中該函數(shù)的參數(shù)是兩個(gè)const string的引用,返回的是bool類型。
- *pf兩端的括號不可以省略,如果沒有這對括號,則pf是一個(gè)返回?cái)?shù)值為bool的指針的函數(shù)
使用函數(shù)指針
- 當(dāng)把函數(shù)的名字作為一個(gè)數(shù)值進(jìn)行使用的時(shí)候,該函數(shù)會自動(dòng)地轉(zhuǎn)化成指針。
- 還可以直接使用指向函數(shù)的指針調(diào)用該函數(shù),而不需要提前解引用指針
- 指向不同函數(shù)類型的指針之間不存在轉(zhuǎn)換的規(guī)則,但是我們可以為函數(shù)指針賦值一個(gè)nullptr或者數(shù)值為0的整型常量的表達(dá)式,表示這個(gè)指針沒有指向任何一個(gè)函數(shù)
重載函數(shù)的指針
- 當(dāng)使用重載函數(shù)的時(shí)候,上下文必須界定該選用哪個(gè)函數(shù)。如果定義了指向重載函數(shù)的指針
函數(shù)的指針形參
- 和數(shù)組類似,雖然不可以定義函數(shù)類型的形參,但是形參可以是指向函數(shù)的指針。此時(shí)形參看起來是函數(shù)的類型,實(shí)際上卻是當(dāng)成指針來使用
?
//第三個(gè)形參是函數(shù)類型,他會自動(dòng)的轉(zhuǎn)換成指針 void useBigger(const string &s1,const string &s2,bool pf(const string &,const string &)); //等價(jià)的聲明:顯式地將形參定義成指向函數(shù)的指針 void useBigger(const string &s1,const string &s2,bool (*pf)(const string &,const string &)); //可以把函數(shù)作為實(shí)參的使用,此時(shí)他會自動(dòng)的轉(zhuǎn)化成指針 useBigger(s1,s2,lengthCompare)- 可以使用類型的別名和decltype來簡化使用函數(shù)指針的代碼
- decltype返回函數(shù)的類型,不會將函數(shù)的類型自動(dòng)轉(zhuǎn)化成為指針類型。因?yàn)?#xff0c;decltype的類型是函數(shù)類型,因此只有在前面加上*,才可以得到指針。
- 這兩個(gè)語句聲明的是同一個(gè)函數(shù),在第一句中,編譯器自動(dòng)的將Func表示的函數(shù)類型轉(zhuǎn)化為指針
返回指向函數(shù)的指針
- 和數(shù)組類似,不能返回一個(gè)函數(shù),但是可以返回一個(gè)指向函數(shù)的類型的指針。
- 必須將返回的類型寫成指針的形式,編譯器不會自動(dòng)的將函數(shù)的返回類型當(dāng)成對應(yīng)的指針類型進(jìn)行處理。
- 要想聲明一個(gè)返回函數(shù)指針的函數(shù),最簡單的方法是使用類型別名
- 和函數(shù)的形參一樣,返回的類型不會自動(dòng)地轉(zhuǎn)化成指針。必須顯示將返回類型指定為指針。
- 也可以直接使用下面的形式直接聲明f1? ?int(*f1(int))(int *,int);
- 按照由內(nèi)達(dá)外的形式閱讀這條語句,f1有形參列表,所以f1是一個(gè)函數(shù);f1前面有*,所以f1返回的是一個(gè)指針,指針的類型本身也包含了形參的列表,因此指針指向函數(shù),該函數(shù)的返回類型是int。
- 還可以使用尾置返回的類型的方式來聲明一個(gè)返回函數(shù)指針的函數(shù) auto f1(int) -> int (*)(int *,int);
將auto和decltype用于函數(shù)指針類型
- 如果明確知道返回的函數(shù)是哪一個(gè),就可以使用decltype簡化書寫函數(shù)指針返回類型的過程。
- 假定有兩個(gè)函數(shù),返回的類型都是string::size_type,并且各有兩個(gè)const string&類型的形參,編寫第三個(gè)函數(shù),接收一個(gè)string類型的參數(shù),返回一個(gè)指針,這個(gè)指針指向前兩個(gè)函數(shù)中的一個(gè)。
- 聲明getFcn唯一需要注意的地方是,牢記將decltype函數(shù)作用于某一個(gè)函數(shù)的時(shí)候,返回的是函數(shù)的類型而不是指針類型。因此,只有顯示地加上 * 表示需要返回的是指針,而不是函數(shù)的本身。
總結(jié)
以上是生活随笔為你收集整理的C++ primer第六章6.7函数指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程的编程
- 下一篇: C++ primer第六章6.6函数匹配