2017-10-04 39 views
-4

你好,我想創建一個像汽車套接字連接我自己的公共C++工具。但我有兩種方法,我想知道哪種方式更好。 方式1: 插入一個頭文件和其他人在裏面的功能(帶源)只包含頭文件和使用的功能...
sock.h創建一個頭文件類和函數庫沒有

#include <iostream> 

class sock { 

    public: 

    bool create(); 
    bool bind(); 
    bool listen(); 
} 

inline bool sock::create() { ... } 
inline bool sock::bind() { ... } 
inline bool sock::listen() { ... } 

和第二種方法是創建一個標題文件,並且還創建靜態庫(C++)
sock.h

#include <iostream> 

class sock { 

    public: 

    bool create(); 
    bool bind(); 
    bool listen(); 
} 

sock.cpp

#include "sock.h" 

bool sock::create() { ... } 
bool sock::bind() { ... } 
bool sock::listen() { ... } 

哪種方式更好? (我選擇第一種方式我自己,因爲它很容易讓客戶只包含一個頭文件和使用的功能,但在第二個方式的客戶端必須包括頭,並且還包括庫文件,沒有任何問題的第一種方式?

+2

編譯的時候可能是一個問題 – user463035818

+0

有沒有問題。據我記得,頭文件中的函數定義默認爲內聯,所以如果你有很長的函數,你可能需要考慮第二種方法。 – xyious

+0

如果在類中定義,則函數默認爲內聯。在類之外(在頭文件或實現文件中),需要將它們標記爲內聯。優化器也可以選擇內聯。 –

回答

1

在功能上是沒有問題的,但是通過保持頭中的函數定義,每頭被導入到一個源文件時,所有的定義將被重新編譯,產生負面影響編譯時和二進制文件的大小(在某些情況下)。

最佳做法是隻定義一次,申報前儘可能。讓你的抽象水緊。

除非你使用模板類,在這種情況下通常需要頭定義。

+0

它是否真的影響二進制大小? AFAIK每個二進制只有1個函數定義,不管每個編譯單元中有1個。 – xyious

+0

你是對的,我想這取決於有多少單元正在導入函數,以及它們是如何鏈接的。 –

+0

所以哪種方式更好? – Ali

相關問題