C 知識總結(7)

2021-08-05 23:15:29 字數 1330 閱讀 6032

1、在c++中,在類的內部定義了函式體的函式,被預設為是內聯函式。而不管是否有

inline

關鍵字。

2、如果函式的定義放在類的外部,函式定義前必須加

inline

才能成為內聯函式,而函式宣告可以加

inline

也可以不加

3、關鍵字inline 必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用。

所以說,inline 是一種「用於實現的關鍵字」,而不是一種「用於宣告的關鍵字」。一般地,使用者可以閱讀函式的宣告,但是看不到函式的定義。儘管在大多數教科書中內聯函式的宣告、定義體前面都加了inline 關鍵字,但我認為inline 不應該出現在函式的宣告中。這個細節雖然不會影響函式的功能,但是體現了高質量c++/c 程式設計風格的乙個基本原則:宣告與定義不可混為一談,使用者沒有必要、也不應該知道函式是否需要內聯。

關鍵字explicit,可以阻止不應該允許的經過轉換建構函式

進行的隱式轉換的發生。宣告為explicit的建構函式

不能在隱式轉換中使用。

c++中, 乙個引數的建構函式

(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個構造器 2 是個預設且隱含的型別轉換操作符。

所以,有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候編譯器就自動呼叫這個構造器, 建立乙個aaa的物件。

這樣看起來好象很酷,

很方便。

但在某些情況下(見下面權威的例子),

卻違背了我們(程式設計師)的本意。

這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫,使用, 不能作為型別轉換操作符被隱含的使用。 呵呵, 看來還是光明正大些比較好。

explicit建構函式的作用

解析:explicit建構函式是用來防止隱式轉換的。請看下面的**:

class test1

//普通建構函式

private:

int num;

};class test2

//explicit(顯式)建構函式

private:

int num;

};int main()

test1的建構函式帶乙個int型的引數,**19行會隱式轉換成呼叫test1的這個建構函式。而test2的建構函式被宣告為explicit(顯式),這表示不能通過隱式轉換來呼叫這個建構函式,因此**20行會出現編譯錯誤。

普通建構函式能夠被隱式呼叫。而explicit建構函式只能被顯示呼叫。

C 第7章 函式 知識總結

c primer plus 第7章知識點總結 簡單的知識不再進行贅述 形參 函式頭中用於接受傳遞值的變數 實參 傳遞給函式的值 使用c 函式,必須完成以下工作 1 提供函式定義 2 提供函式原型 3 呼叫函式 函式原型 當函式沒有寫在main函式前面,而是寫在後面時,需要在main前面加上函式的原型...

c 知識總結

第一章節 1.類的兩種定義形式 1 在類中定義成員函式 2 在類之後定義成員函式 2.class 和struct的區別 1 c的struct沒有方法,而c 的struct可以有方法 函式 2 c的struct的成員沒有訪問許可權,c 的class則有,且預設許可權私有 3 c的struct並不能為空...

C 知識總結

c 總結 一丶運算子過載 1丶基本概念 將運算子看作是一種特殊的函式 運算元是函式的引數,運算結果是函式的返回值 2丶運算子函式 定義過載運算子和定義普通函式類似 函式名由關鍵字operator 和其後要定義的運算子組成 operator operator operator 返回型別 運算結果的型別...