文章轉自:https://blog.csdn.net/isla_forever/article/details/76933614
版權歸原作者!


c++一开始就有这么两行代码

#include<iostream>
using namespace std;

基本上所有教科书都会解释#include<…>是一个预编译头,后面尖括号是头文件。接下来下一行是使用标准命名空间std。然后就没有然后了,或者有然后也是各种解释不清楚的东西。现在我想用一种清晰直观的解释来说明第二行的命名空间的作用和它与头文件到底有什么关系。
首先说命名空间(namespace)。

命名空间的主要作用就是为了解决“重名”带来的麻烦。

对于“重名”,其他的一些资料和网上的各种大牛给出了一种形象的解释:学校中有很多人都叫“张三”,但是他们都分在不同的班级,不同的“班号”就能让我们将所有的“张三”区别开,因此这里的“班号”就相当于“命名空间”。

除去命名空间,c++也有很多方式解决这个问题:

1.创建一个类,然后创建一个类的对象,不同的类中可以含有同名的变量/函数(java一般称为方法),通过不同类的对象来调用不同的同名函数,从而防止重名带来的问题;

2.函数重载;

//可能还有别的方式,以我目前具备的知识储备能想到的就这么多

但由于全局变量/对象/函数的存在,以上方法有可能会“失效”。因此命名空间被发明出来解决这个问题。

我们先来看如何创建自己的命名空间,这对理解为何要有using namespace std;这行代码非常有帮助

很简单,非常类似于创建结构体:

namespace my_ns
{//your code...
}

在使用的时候就可以using namespace my_ns;
回过头来解释之前的问题。我们很可能会去想,cin、cout等不已经在头文件iostream中了么,为何还要包含标准命名空间std?
给人一种似乎#include没用的感觉,又好像cin、cout等一批东西同时存在于这两个“分立”的东西里。

实际的答案是,确实标准的输入输出同时存在于头文件和命名空间中,但头文件和命名空间并不是“分立”的,而是在头文件中包含了标准的命名空间std。
应该这么理解:头文件iostream中有这么几行定义了标准命名空间std的代码

namespace std
{...cin...cout......
}

当我们没有using namespace std或者使用std::cin/std::cout/…的时候,cin,cout是不可见的,也就是说即使我们包含了iostream,但由于没有使用标准命名空间std,使得该命名空间内所有的内容我们无法使用。
这就说明了头文件iostream和标准命名空间std的关系——正如很多人所说,这俩是两个不同的东西,但是由于它们的“包含”关系(在头文件中定义了命名空间std),我们不能说它们是完全独立的。要想理解好为何会有开头的两行,我认为弄清楚这个过程和原理是必不可少的。

要另外强调的是iostream和iostream.h是不同的,后者是为了向前兼顾c语言的产物,在新版本的VS中已经删去。iostream.h可以理解为包含了命名空间std的iostream。

[C++]头文件(Header Files)和命名空间(Namespace)相关推荐

  1. C语言两个同名头文件,C lang: C语言中两个头文件引入相同的头文件(Header.h)

    C lang: C语言中两个头文件引入相同的头文件(Header.h) C lang: C语言中两个头文件引入相同的头文件(Header.h) [var1] For example: Header.h ...

  2. 头文件header file和源文件 source file

    头文件 header file,后缀是.h,头文件负责类的定义,函数声明,常量的定义 源文件source file,后缀是.cpp, 函数的实现 最主要的作用就是将函数的声明和实现分开,如果想将类和函 ...

  3. 头文件的包含以及命名空间的引入尽量写在cpp里

    原文:http://blog.csdn.net/u012234115/article/details/40019945 1,头文件尽量包含在cpp文件里,而不是h文件里 放在.cpp文件中是比较安全的 ...

  4. C++ 学习之旅(3)——头文件Header

    我们知道,在C++中,函数只能定义一次,而在cpp文件中如果想使用其他cpp文件中定义了的函数,就必须声明,这样才能通过编译,然后链接器才会在调用函数时找到该函数的定义.那么当函数声明很多的时候,代码 ...

  5. C头文件 header 大全

    C 语言头文件大全,我要的都能在里面找到,分享出来. 链接:https://pan.baidu.com/s/1WT-5uZljPib1vg4p5PULGA  提取码:9ix0

  6. 我的探究:为什么.h头文件中不要写using namespace std

    转载于:https://www.cnblogs.com/nanlan2017/p/9179224.html

  7. c语言resource files的作用,VC中Source Files, Header Files, Resource Files,External Dependencies的作用...

    VC中Source Files, Header Files, Resource Files,External Dependencies的作用 很久没有用过VC了,突然觉得想整理出来简单基本的东西: S ...

  8. c语言resource files的作用,VC中Source Files, Header Files, Resource Fil

    VC++6.0中Source Files,Header Files,Resource Files,External Dependencies区别 Source Files 放源文件(.c..cpp)程 ...

  9. 使用命名空间、头文件和实现文件

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

最新文章

  1. 微软:Windows 7 SP1将于本月正式发布
  2. 苹果企业证书_今日更新:丨企业证书已更新丨苹果丨安卓软件下载说明丨
  3. 前端那些事之weex
  4. flutter图片点击跳转_使用Flutter之后,我们的CPU占用率降了50%
  5. 如何在centos安装python3.4
  6. 国科大高级人工智能2-人工神经网络(MLP、Hopfield)
  7. 【转载】GuanDan v2.01 发布
  8. Linux下动态库(.so)和静态库(.a)
  9. 海洋zyapi.php,zyapi.php · 姬晓亮/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com...
  10. 25.使用getScript()方法异步加载并执行js文件
  11. 算法:求树的最大深度104. Maximum Depth of Binary Tree
  12. 电路原理 的 一些基础知识
  13. 基于 Layui form 组件的省市区级联的实现 - 组件化
  14. python开发视频播放器_基于 Flask 的在线视频播放器
  15. html5 特效框架,超级惊艳 10款HTML5动画特效推荐
  16. 【李宏毅机器学习学习1】
  17. ISP--Black Level Correction(黑电平矫正)
  18. 服务器启动显示防火墙,宝塔面板防火墙怎么打开
  19. 怎么样让别人访问我的计算机,局域网内怎么让别人访问我的电脑
  20. multisim 高低电平点亮灯证明

热门文章

  1. LeetCode 100. Same Tree
  2. LaTex中编译时出现“ Undefined control sequence”问题
  3. 2019春第十二周作业Compile Summarize
  4. kubernetes权威指南学习遇见的问题以及意见之二:Permission denied
  5. POJ 1751 Highways (kruskal)
  6. SpringMVC 上传图片保存到服务器 同时更改图片名称保存至数据库
  7. Android系统各版本号及代号
  8. BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】
  9. 关于【bootstrap modal 模态框弹出瞬间消失的问题】
  10. 合伙人和创始人的区别