2012-12-26 69 views
1

我對C++很陌生,我想了解爲什麼某些庫需要首先編譯。已編譯的庫vs僅包含頭文件的庫

例如一些Boost庫只是頭(如MSM)其他一些需要編譯(例如定時器)

我找不到爲什麼會這樣一個很好的解釋。有人能幫助我理解嗎?

謝謝

回答

1

某些種類的東西都保存在頭只,而不是通常的.h(pp).cpp文件。我所知道的只有一個是模板類和函數。我確信助力會利用。

+0

那麼爲什麼我不能在我的代碼中添加.cpp和.h文件(就像我在代碼中包含boost/msm.hpp)並編譯? – Kam

+0

@Kam沒有人說你不能。 – Rapptz

+1

@Kam:不完全是,你不能'#include'那些_cpp_文件,並期望它們工作。但是,您可以將它們添加到您的項目中,並將它們作爲其一部分進行編譯。 –

1
  • 標題只有庫更容易使用,但更難寫。你只需要#include他們。
  • 他們有更多的優化機會,但編譯需要更長的時間。有更多的代碼和更多的上下文來進行優化,但這需要時間。
  • 最後但並非最不重要,template必須在頭文件中定義。

但是,通過使用頭文件,可以避開多少人,或者願意忍受多少人是有限制的。例如,處理共享庫中的靜態對象,這對標準一無所知,有時候只是不能在頭文件中完成。

相關問題