2013-04-10 84 views
4

予跨越包括各種函數原型聲明其是內聯和const頭文件傳來:C++內聯函數原型

inline bool Foo1() const; 
inline bool Foo2() const; 
inline bool Foo3() const; 
... 

據我所知,直列關鍵字允許編譯器(潛在地)展開函數調用時,但爲什麼不包含函數的主體?

它會更有意義,我如果定義被列入頭文件:

inline bool Foo1() const { return m_Foo1; }; 
inline bool Foo2() const { return m_Foo2; }; 
inline bool Foo3() const { return m_Foo3; }; 
... 

什麼是使用的原型內嵌的意義呢?

+0

謝謝,tacp。實際上,在發佈之前我確實看到了這個問題,但我主要關心在原型中使用內聯的目的,而不是使用內聯與原型。 – Kirby 2013-04-10 23:27:24

回答

3

這是可能的,這只是一個錯誤,但最有可能的程序員希望使函數內聯,但不希望用這些函數的實現混淆文件的那部分。編寫「僅頭文件」代碼時,這是一種相當常見的模式。你有一個沒有(或很少)實現的普通頭文件,並且包含另一個文件,但是它的行爲像一個實現文件幷包含所有的實現。

0

因爲函數可能在目標文件中,開發人員不希望任何人看到源代碼。

+0

否...內聯函數必須在調用它的同一個文件(編譯單元)中定義。所以內聯函數是ususaly在頭文件中定義的。所以我認爲,你的文件不能調用一個目標文件中的內聯函數。 – Sam 2013-11-08 07:28:42

1

有很多原因。

  1. 您需要空的函數聲明來解決一個函數調用另一個函數的依賴性問題。
  2. 由於文體原因。

唯一的限制是函數定義必須包含在使用內聯函數的每個編譯單元中。否則,內聯函數在聲明和定義方式上與普通函數完全相同。

2

它只是簡單地讓一個類接口緊湊地顯示。

以後存在於編譯單元的功能定義(被稱爲前它們,如果他們被稱爲)

Dr. Dobb's

要麼函數定義或函數原型可以聲明一致。如果一個函數原型聲明爲inline,函數的一個單獨的定義必須在其他地方出現的模塊中,如果被調用的函數