2017-10-04 20 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

相关问题