原文:http://blog.csdn.net/u012234115/article/details/40019945

1,头文件尽量包含在cpp文件里,而不是h文件里

  • 放在.cpp文件中是比较安全的,文件在多次递归包含后很容易出现一些定义和声明上的问题。
  • 放在cpp中可以减小头文件依赖,可以提高编译速度。所以,能放在cpp中的,就不要放在h中。
  • 只有头文件必须用到的放到头文件,头文件中可以使用前置声明来代替。或者所有cpp都用到的也可以放到头文件。
  • 哪里用到就放哪里,谁用谁包含。
  • 一般是默认放在cpp里,之后如果出现.h也用了,再把cpp中的删了。
2,不要在头文件中使用using namespace

经常在头文件中使用namespace。但这样的结果就是,这个头文件会被其他的文件所包含,那么这样那个文件也用了namespace所指定的命名空间,这并不是我们所期望的,可能导致冲突。所以不要在头文件里面使用namespace,特别是接口头文件。

比如说:

在A.h中

using namespace std;

在B.h中,
我们自己定义了一个类vector,
class vector
本想这个类是纯粹我们自己定义的,不是std的那个。

可是在B.cpp中,
我们
#include "B.h"
#include "A.h"

vector a;

在编译到此的时候,编译器就会报错,不知道这个vector到底是std的那个,还是我们自己定义的那个。

所以我们最好不要在头文件中使用using namespace XXX;我们可以在头文件中直接使用全名称。在cpp中可以放心地使用它。

头文件的包含以及命名空间的引入尽量写在cpp里相关推荐

  1. 防止头文件重复包含之pragma once与#ifndef

    在我们自己编写 C/C++的头文件时,可能会忽略一点:用一些处理机制来避免头文件的重复包含,因为头文件的内容在预编译时是把头文件的内容完全拷贝到引入的地方替换头文件的包含命令,而包含的头文件可能有包含 ...

  2. [原]C++头文件的包含顺序研究

    作者:朱金灿 来源:http://blog.csdn.net/clever101 一.<Google C++ 编程风格指南>里的观点 公司在推行编码规范,领导提议基本上使用<Goog ...

  3. [C++]头文件(Header Files)和命名空间(Namespace)

    文章轉自:https://blog.csdn.net/isla_forever/article/details/76933614 版權歸原作者! c++一开始就有这么两行代码 #include< ...

  4. C/C++ ifndef与头文件重复包含解析

    ifndef 一个预处理指令,作用是判断一个符号是否存在,或者是不存在,与之对应的还有一个ifdef.ifndef一般用于解决头文件重复包含的问题. 符号 符号一般指的是,函数定义的名称,类名,宏名称 ...

  5. C++编程常用头文件及其包含函数汇总

    C++编程常用头文件及其包含函数汇总 1.#include <iostream> #include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个 ...

  6. C++中头文件相互包含的几点问题

    一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中, ...

  7. C语言 define 防止头文件重复包含 - C语言零基础入门教程

    目录 一.头文件重复包含编译器报错 1.简单的理解头文件重复包 2.老流氓的理解头文件重复包 二.通过宏定义解决头文件重复包含 1.通过 #ifndef / #define 解决头文件重复包含 2.通 ...

  8. c++ 1:非MFC工程使用MFC库时的问题及解决办法(如果要用CString或者提示windows头文件重复包含)...

    非MFC工程使用MFC库时的问题及解决办法(如果要用CString或者提示windows头文件重复包含) vc6和vc71的工程向导中都包含非MFC的工程,诸如win32 console projec ...

  9. C++头文件重复包含问题分析及解决方案

    一.头文件重复包含问题分析 1) 问题重现 举例说明.假设在某个C++ 头文件 或 源文件 中,包含了A.h和B.h两个头文件: #include "A.h" #include & ...

最新文章

  1. 随机森林OOB score作用
  2. openstack之keystone
  3. tensorflow2版本学习教程1-mnist数据集手写字体
  4. 【机器学习】中国大学慕课《机器学习》课后习题(二)(回归)
  5. 微信小程序 App()方法与getApp()方法
  6. Oracle创建pfile spfile 文件及其恢复
  7. 云桌面 瘦终端_小米盒子连接Citrix云桌面
  8. 深入理解Linux/Unix文件描述符和epoll
  9. php服务层设计与实现的,PHP中service层怎么设计兼顾优雅和方便?
  10. MySQL回滚日志(undo log)总结
  11. 微软ASP.NET AJAX框架剖析(1)
  12. html阻止超链接跳转,009_阻止html标签默认事件的执行,比如阻止超链接默认点击事件的执行...
  13. 我为什么要弃医从(码)农
  14. 广义线性模型解读必看文章
  15. Linux服务器集群系统(一)——LVS项目介绍
  16. Android读取RAM,ROM,SD卡容量
  17. [JAVA冷知识]什么是逆变(contravariant)与协变(covariant)?数组是否支持协变逆变?泛型呢?
  18. Python格式化输出%.2f%%
  19. js 取表格table td值 botton a
  20. 20180626 STM32 ---利用KILE5 仿真IO口的波形图

热门文章

  1. Linux内核之内核同步(二)——原子操作
  2. mysql 限定查询_MySQL Limit 限定查询记录数
  3. extlink.php,ExtJs 学习笔记基础篇 Ext组件的使用_extjs
  4. Spring Security的内置过滤器是如何维护的?
  5. 2021年技术人员的最佳Linux桌面前5名
  6. 一条诡异的insert语句
  7. 皮一皮:下雨也阻止不了!
  8. 皮一皮:论蓝朋友的拍摄技术
  9. 赠书:算法与数据中台“网约车业务实践”
  10. 万字长文,说透了 Openshift4 的安装过程!