C++中的函數(shù)修飾符深入講解
前言
C++博大精深,而且不斷擁抱新的變化。本文簡(jiǎn)要總結(jié)一下C++中函數(shù)的修飾符,其中部分在實(shí)際中極少用到。
按修飾符的位置分為函數(shù)名前與函數(shù)名后兩種,以下分別做介紹。
函數(shù)名前
1、返回值類型
返回值類型是C++中定義函數(shù)的必備部分,這些修飾符包括void,(unsigned) int,bool等內(nèi)置基本數(shù)據(jù)類型和自定義類型,也包括修飾返回值const關(guān)鍵字(如const int*),還包括C++11中新增的類型自動(dòng)推導(dǎo)auto關(guān)鍵字。
2、 template
template關(guān)鍵字聲明函數(shù)是模板函數(shù)。
3、 virtual
virtual關(guān)鍵字聲明函數(shù)是虛函數(shù),可被子類覆蓋。
4、 inline
inline關(guān)鍵字提示編譯器應(yīng)將函數(shù)內(nèi)聯(lián)。
5、 static
static修飾類的成員函數(shù)時(shí)指示函數(shù)是靜態(tài)成員函數(shù),不從屬于具體對(duì)象;修飾單獨(dú)的函數(shù)時(shí),限定函數(shù)的可見范圍為本文件內(nèi)。
6、 extern
extern關(guān)鍵字聲明一個(gè)定義在外部的函數(shù)
7、 explicit
explicit關(guān)鍵字在C++11新增,只用于構(gòu)造函數(shù),指定構(gòu)造函數(shù)要顯式定義,不能隱式轉(zhuǎn)換。
8、 friend
friend關(guān)鍵字聲明類的友元函數(shù),在函數(shù)內(nèi)可直接訪問對(duì)象的私有或受保護(hù)成員及成員函數(shù)。
9、 constexpr
C++11中新增,指示函數(shù)返回常量表達(dá)式(可以簡(jiǎn)單理解為返回字面量)。
函數(shù)名后
置于函數(shù)名后的修飾符有兩種,第一種使用等號(hào)(=),第二種直接修飾。
1、使用等號(hào)
此類較為簡(jiǎn)單,總共有三種:
=0:只能用于虛函數(shù),表示函數(shù)為純虛函數(shù)。
=default:C++11新增,只能用于編譯器提供默認(rèn)實(shí)現(xiàn)的特殊成員函數(shù),指示使用默認(rèn)實(shí)現(xiàn)。
=delete:C++11新增,只能用于編譯器提供默認(rèn)實(shí)現(xiàn)的特殊成員函數(shù),指示編譯器應(yīng)該刪除該函數(shù)的默認(rèn)實(shí)現(xiàn)。
2、直接修飾
種類繁多,本人已知的修飾符包括:
const
表示函數(shù)不會(huì)修改對(duì)象(或者說調(diào)用期間對(duì)象不變),注意不包括mutable修飾的成員變量,可參考本人之前文章:C++中的mutable和volatile。
volatile
類似于const修飾的函數(shù),表示對(duì)象狀態(tài)可能隨時(shí)會(huì)改變;const修飾的函數(shù)內(nèi)只能調(diào)用自身的const成員方法,同理volatile函數(shù)內(nèi)也只能調(diào)用自身volatile成員函數(shù)。
&
C++11引入的功能,左值引用限定符,指示函數(shù)只能被左值對(duì)象調(diào)用。
&&
C++11引入,右值引用限定符,指示函數(shù)只能被右值調(diào)用。如果函數(shù)沒有引用限定符修飾,左值和右值均可調(diào)用。一個(gè)引用限定例子:
#include <iostream> struct S { void f() & { std::cout << "lvalue\n"; } void f() &&{ std::cout << "rvalue\n"; } }; int main(){ S s; s.f(); // 打印“ lvalue ” std::move(s).f(); // 打印“ rvalue ” S().f(); // 打印“ rvalue ” }
override
C++11引入的功能,聲明成員函數(shù)覆蓋父類的虛函數(shù)。聲明為override后,子類聲明時(shí)可不寫virtual。
final
C++11引入,指示函數(shù)是最終實(shí)現(xiàn),子類不應(yīng)當(dāng)再定義或覆蓋,可與override同時(shí)使用。
noexcept
C++11引入,修飾函數(shù)是否會(huì)拋出異常。
throw
指示函數(shù)拋出異常及類型,C++11起被廢棄。
總結(jié)
本文簡(jiǎn)要概括的列出了C++定義函數(shù)的修飾符。需要注意的是,嚴(yán)格來說上述內(nèi)容中并不全是修飾符,部分僅是語法結(jié)構(gòu)。
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)我們的支持。
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什