c++
博大精深,而且不斷擁抱新的變化。本文簡要總結一下c++
中函式的修飾符,其中部分在實際中極少用到。
按修飾符的位置分為函式名前與函式名後兩種,以下分別做介紹。
返回值型別返回值型別是c++
中定義函式的必備部分,這些修飾符包括void
,(unsigned) int
,bool
等內建基本資料型別和自定義型別,也包括修飾返回值const
關鍵字(如const int*
),還包括c++11
中新增的型別自動推導auto
關鍵字。
template
template
關鍵字宣告函式是模板函式。
virtual
virtual
關鍵字宣告函式是虛函式,可被子類覆蓋。
inline
inline
關鍵字提示編譯器應將函式內聯。
static
static
修飾類的成員函式時指示函式是靜態成員函式,不從屬於具體物件;修飾單獨的函式時,限定函式的可見範圍為本檔案內。
extern
extern
關鍵字宣告乙個定義在外部的函式
explicit
explicit
關鍵字在c++11
新增,只用於建構函式,指定建構函式要顯式定義,不能隱式轉換。
friend
friend
關鍵字宣告類的友元函式,在函式內可直接訪問物件的私有或受保護成員及成員函式。
constexpr
c++11
中新增,指示函式返回常量表示式(可以簡單理解為返回字面量)。
置於函式名後的修飾符有兩種,第一種使用等號(=
),第二種直接修飾。
使用等號
此類較為簡單,總共有三種:
=0
:只能用於虛函式,表示函式為純虛函式。
=default
:c++11
新增,只能用於編譯器提供預設實現的特殊成員函式,指示使用預設實現。
=delete
:c++11
新增,只能用於編譯器提供預設實現的特殊成員函式,指示編譯器應該刪除該函式的預設實現。
直接修飾
種類繁多,本人已知的修飾符包括:
const
表示函式不會修改物件(或者說呼叫期間物件不變),注意不包括mutable
修飾的成員變數,可參考本人之前文章:c++中的mutable和volatile。
volatile
類似於const
修飾的函式,表示物件狀態可能隨時會改變;const
修飾的函式內只能呼叫自身的const
成員方法,同理volatile
函式內也只能呼叫自身volatile
成員函式。
&
c++11
引入的功能,左值引用限定符,指示函式只能被左值物件呼叫。
&&
c++11
引入,右值引用限定符,指示函式只能被右值呼叫。如果函式沒有引用限定符修飾,左值和右值均可呼叫。乙個引用限定例子:
#include struct s
void f() &&
};int main()
override
c++11
引入的功能,宣告成員函式覆蓋父類的虛函式。宣告為override
後,子類宣告時可不寫virtual
。
final
c++11
引入,指示函式是最終實現,子類不應當再定義或覆蓋,可與override
同時使用。
noexcept
c++11
引入,修飾函式是否會丟擲異常。
throw
指示函式丟擲異常及型別,c++11
起被廢棄。
本文簡要概括的列出了c++
定義函式的修飾符。需要注意的是,嚴格來說上述內容中並不全是修飾符,部分僅是語法結構。
C 函式修飾符總結
c 博大精深,而且不斷擁抱新的變化。本文簡要總結一下c 中函式的修飾符,其中部分在實際中極少用到。按修飾符的位置分為函式名前與函式名後兩種,以下分別做介紹。返回值型別 返回值型別是c 中定義函式的必備部分,這些修飾符包括void,unsigned int,bool等內建基本資料型別和自定義型別,也包...
C 修飾符 總結
c 中的修飾符用於限定型別和成員方法。修飾符有幾種不同的分法,可以分為類的修飾符 成員修飾符和訪問修飾符。一 類修飾符,用於修飾類種類。1 abstract 用於定義乙個抽象類,抽象類不能被例項化,只能作為其他類的基類,可以被繼承,且派生類中需要實現抽象類的所有成員。2 sealed 用於定義乙個不...
C 修飾符 總結
c 中的修飾符用於限定型別和成員方法。修飾符有幾種不同的分法,可以分為類的修飾符 成員修飾符和訪問修飾符。一 類修飾符,用於修飾類種類。1 abstract 用於定義乙個抽象類,抽象類不能被例項化,只能作為其他類的基類,可以被繼承,且派生類中需要實現抽象類的所有成員。2 sealed 用於定義乙個不...