头文件应包含什么,不应包含什么(转)

转自:https://blog.csdn.net/ALONE_WORK/article/details/126986443

 

文章知识点来自《大规模 C++ 程序设计》。

当程序具有规模的时候,编译、链接的速度跟包含的头文件有很大的关系,我们需要知道头文件中应该包含什么,不应该包含什么。

代码示例

 1 // radio.h
 2 #ifndef __RADIO_H__
 3 #define __RADIO_H__
 4 
 5 // 应包含内容
 6 class Radio                                // 正确:类定义
 7 {
 8     static int s_count;                    // 正确:静态数据成员声明
 9     static const double S_PI;              // 正确:静态常量数据成员声明
10     int d_size;                            // 正确:数据成员定义
11     // ...
12 public:
13     int size() const;                     // 正确:成员函数声明
14     // ...
15 };
16 
17 inline int Radio::size() const            // 正确:内联函数定义
18 {
19     return d_size;
20 }
21 
22 // 不应包含内容
23 int Radio::s_count;                       // 错误:静态数据成员定义,应放在 .cpp 文件中
24 double Radio::S_PI = 3.1415926;           // 错误:静态常量数据成员定义,应放在 .cpp 文件中
25 int Radio::size() const { /*...*/ }       // 错误:成员函数定义,应放在 .cpp 文件中
26 int z;                                    // 错误:外部数据定义
27 extern int LENGTH = 10;                   // 错误:外部数据定义
28 const int WIDTH = 5;                      // 避免:常量数据定义
29 static int y;                             // 避免:静态数据定义
30 static void func() { /*...*/ }            // 避免:静态函数定义
31 
32 #endif // __RADIO_H__

原因

更多内容请参考原书。

在 C++ 头文件的作用域内放置带有内部链接的定义,如静态函数或数据,是合法的,但是这种做法并不理想。这样不仅污染了全局名称空间,而且包含该头文件的每一个编译单元中消耗数据空间。

 

=========================================================================================================================

此外,内联函数、constexpr函数(c++ primer P214)通常也都定义在头文件中

原文链接: https://www.cnblogs.com/tan-wm/p/17071349.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    头文件应包含什么,不应包含什么(转)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/314374

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午1:19
下一篇 2023年2月16日 下午1:19

相关推荐