头文件应包含什么,不应包含什么?

头文件应包含什么,不应包含什么?

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

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

代码示例

// radio.h
#ifndef __RADIO_H__
#define __RADIO_H__

// 应包含内容
class Radio                                // 正确:类定义
{
    static int s_count;                    // 正确:静态数据成员声明
    static const double S_PI;              // 正确:静态常量数据成员声明
    int d_size;                            // 正确:数据成员定义
    // ...
public:
    int size() const;                     // 正确:成员函数声明
    // ...
};

inline int Radio::size() const            // 正确:内联函数定义
{
    return d_size;
}

// 不应包含内容
int Radio::s_count;                       // 错误:静态数据成员定义,应放在 .cpp 文件中
double Radio::S_PI = 3.1415926;           // 错误:静态常量数据成员定义,应放在 .cpp 文件中
int Radio::size() const { /*...*/ }       // 错误:成员函数定义,应放在 .cpp 文件中
int z;                                    // 错误:外部数据定义
extern int LENGTH = 10;                   // 错误:外部数据定义
const int WIDTH = 5;                      // 避免:常量数据定义
static int y;                             // 避免:静态数据定义
static void func() { /*...*/ }            // 避免:静态函数定义

#endif // __RADIO_H__

原因

更多内容请参考原书。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALONE_WORK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值