C++中的函數(shù)修飾符深入講解
前言
C++博大精深,而且不斷擁抱新的變化。本文簡要總結一下C++中函數(shù)的修飾符,其中部分在實際中極少用到。
按修飾符的位置分為函數(shù)名前與函數(shù)名后兩種,以下分別做介紹。
函數(shù)名前
1、返回值類型
返回值類型是C++中定義函數(shù)的必備部分,這些修飾符包括void,(unsigned) int,bool等內(nèi)置基本數(shù)據(jù)類型和自定義類型,也包括修飾返回值const關鍵字(如const int*),還包括C++11中新增的類型自動推導auto關鍵字。
2、 template
template關鍵字聲明函數(shù)是模板函數(shù)。
3、 virtual
virtual關鍵字聲明函數(shù)是虛函數(shù),可被子類覆蓋。
4、 inline
inline關鍵字提示編譯器應將函數(shù)內(nèi)聯(lián)。
5、 static
static修飾類的成員函數(shù)時指示函數(shù)是靜態(tài)成員函數(shù),不從屬于具體對象;修飾單獨的函數(shù)時,限定函數(shù)的可見范圍為本文件內(nèi)。
6、 extern
extern關鍵字聲明一個定義在外部的函數(shù)
7、 explicit
explicit關鍵字在C++11新增,只用于構造函數(shù),指定構造函數(shù)要顯式定義,不能隱式轉換。
8、 friend
friend關鍵字聲明類的友元函數(shù),在函數(shù)內(nèi)可直接訪問對象的私有或受保護成員及成員函數(shù)。
9、 constexpr
C++11中新增,指示函數(shù)返回常量表達式(可以簡單理解為返回字面量)。
函數(shù)名后
置于函數(shù)名后的修飾符有兩種,第一種使用等號(=),第二種直接修飾。
1、使用等號
此類較為簡單,總共有三種:
=0:只能用于虛函數(shù),表示函數(shù)為純虛函數(shù)。
=default:C++11新增,只能用于編譯器提供默認實現(xiàn)的特殊成員函數(shù),指示使用默認實現(xiàn)。
=delete:C++11新增,只能用于編譯器提供默認實現(xiàn)的特殊成員函數(shù),指示編譯器應該刪除該函數(shù)的默認實現(xiàn)。
2、直接修飾
種類繁多,本人已知的修飾符包括:
const
表示函數(shù)不會修改對象(或者說調(diào)用期間對象不變),注意不包括mutable修飾的成員變量,可參考本人之前文章:C++中的mutable和volatile。
volatile
類似于const修飾的函數(shù),表示對象狀態(tài)可能隨時會改變;const修飾的函數(shù)內(nèi)只能調(diào)用自身的const成員方法,同理volatile函數(shù)內(nèi)也只能調(diào)用自身volatile成員函數(shù)。
&
C++11引入的功能,左值引用限定符,指示函數(shù)只能被左值對象調(diào)用。
&&
C++11引入,右值引用限定符,指示函數(shù)只能被右值調(diào)用。如果函數(shù)沒有引用限定符修飾,左值和右值均可調(diào)用。一個引用限定例子:
#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后,子類聲明時可不寫virtual。
final
C++11引入,指示函數(shù)是最終實現(xiàn),子類不應當再定義或覆蓋,可與override同時使用。
noexcept
C++11引入,修飾函數(shù)是否會拋出異常。
throw
指示函數(shù)拋出異常及類型,C++11起被廢棄。
總結
本文簡要概括的列出了C++定義函數(shù)的修飾符。需要注意的是,嚴格來說上述內(nèi)容中并不全是修飾符,部分僅是語法結構。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
C++中的opeartor?new和placement?new使用步驟
這篇文章主要介紹了C++中的opeartor?new和placement?new詳解,在很多情況下,placement?new的使用方法和其他普通的new有所不同。這里提供了它的使用步驟,需要的朋友可以參考下2022-10-10
include包含頭文件的語句中,雙引號和尖括號的區(qū)別(詳解)
下面小編就為大家?guī)硪黄猧nclude包含頭文件的語句中,雙引號和尖括號的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07

