(C++)浅谈using namespace std

1、<iostream>和<iostream.h>

在你的编译器include文件夹里面可以看到,二者是两个文件,里面的代码是不一样的。

后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里;

c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。

因此,

当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;

当使用<iostream>时,该头文件没有定义全局命名空间,必须使用namespace std,这样才能正确使用cout。

2、using namespace std

  • 什么是namespace?

  所谓namespace,是指标识符的各种可见范围。

  C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

  • namespace std的使用:

  由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

  1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:
  std::cout << std::hex << 3.4 << std::endl;

  2、使用using关键字。
  using std::cout;
  using std::endl;

  以上程序可以写成
  cout << std::hex << 3.4 << endl;

  3、最方便的就是使用using namespace std;

  例如:
  #include <iostream>
  #include <sstream>
  #include <string>
  using namespace std;

  这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:
  cout << hex << 3.4 << endl;
  因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。 

  所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。

  命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"

  • 什么时候需要加using namespace std,什么时候不加?

  命名空间的作用是什么?

  命名空间的作用就是防止函数或变量等命名重复。

  例如:STL有个string类,如果你也自定义了一个string类,那么此时编译器就无法识别string是哪个string,如果加上命名空间的话,就可以很好地区分开。假设我把自定义的string类放在了AAA这个命名空间里,那么在使用时AAA::string会告诉编译器,调用的是AAA命名空间中的string类,而std::string会告诉编译器,调用的是std命名空间的string类。

  回答上述问题,使用using namespace std告诉编译器,我默认使用的是std命名空间里面的东西,因此当出现与std命名空间中函数和类等命名重复的定义时,为了避免编译器混淆,不要加上using namespace std,但如果还需要调用里面的东西时,可以使用直接指定标识符的方法,如std::cout等。

  

参考文章:

http://www.jb51.net/article/40018.htm

http://wenwen.sogou.com/z/q227104716.htm

转载于:https://www.cnblogs.com/AndyJee/p/4575319.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lpr命令linux下未找到,linux – LPR命令无法识别CUPS打印机

我有一个杯子服务器,上面配置了一台共享打印机.它可以毫无问题地打印测试页.printername (Idle, Accepting Jobs, Shared)Description: descLocation:Driver: Zebra ZPL Label Printer (grayscale, 2-sided printing)Connection: socket://172.20.50.26Defaults: job-sheetsnon…

Qt如何将数据保存成CSV文件

一、csv文件 csv文件是逗号分隔值&#xff08;Comma-Separated Values&#xff0c;CSV&#xff09;文件的缩写&#xff0c;其文件以纯文本形式存储表格数据&#xff08;数字和文本&#xff09;&#xff0c;各个字段用逗号进行分割&#xff0c;采用回车进行换行。由于采用纯文本…

windows 2003负载均衡故障切换

准备一个vip realserver 1 realserver 2 server1&#xff1a; IP:192.168.1.3 掩码:255.255.255.0 网关:192.168.1.254 server2: IP:192.168.1.4 掩码:255.255.255.0 网关:192.168.1.254   在server1上通过NLB管理器建立集群: 虚拟IP:192.168.1.111 掩码:255.255.255.0 网关:…

SecureCRT日志配置

SecureCRT设置 日志文件名&#xff1a; D:\Embedded\SecureCRT\SessionLog\%S__%Y-%M-%D_%h%m.log 连接时&#xff1a; [%Y%M%D %h:%m:%s] 在每行: [%h:%m:%s]

linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig

chkconfig --listchkconfig --level 3 network offchkconfig --level 345 network offchkconfig --del networkchkconfig --add networkchkconfig工具crond、iptables、firewalld、nginx、httpd、mysql等等&#xff0c;都属于服务。chkconfig工具&#xff0c;在centos6和之前的…

linux0.11文件分析

在kernel包中有几个重要的文件夹和文件&#xff0c;他们各司其职&#xff0c;处理着有关内核的一些功能操作。其中文件夹有三个&#xff1a;blk_drv(块设备驱动)&#xff0c;chr_drv(字符设备驱动)&#xff0c;math(数学协处理器) 文件中asm.s fork.c mktime.c panic.c p…

嵌入式开发过程中结构体字节对齐问题pragma pack(1)

一、引言 曾经刚入门嵌入式在开发一个应用时&#xff0c;用到了自定义结构体&#xff0c;底层嵌入式单片机运行该结构体没问题&#xff0c;但是在Qt开发应用软件对接协议时&#xff0c;一直通不过&#xff0c;仔细分析才发现是QT这边的结构体字节并没有按照单字节对齐&#xf…

Exchange2003-2010迁移系列之二,迁移前的准备工作(上)

Exchange2010迁移前的准备工作&#xff08;上&#xff09; 上篇博文发出后&#xff0c;很多博友支持得非常给力&#xff0c;在此一并谢过&#xff01;也有一些博友反映看得不是很明白&#xff0c;但仍然支持…..本文中首先就环境问题再为大家解释一下&#xff0c;然后介绍如何进…

BMP图像文件格式分析附带图解

From: http://www.raidcn.com/js/BMPTuXiangWenJianGeShiFenXiFuDaiTuJie.html 认识BMP文件格式&#xff0c;以及bmp文件存储结构 &#xff0c;通过winhex查看文件结构解析。 一、认识BMP文件格式. 1、 BMP格式是由微软公司开发。通常BMP图像文件的后缀名是BMP&#xff0c;但…

matlab安装MinGW-64代码C/C++编译器的方法

一、说明 matlab中编写的m文件转成C/C代码&#xff0c;以及matlab中执行C/C带啊&#xff0c;需要用到mex 查看matlab是否支持可以输入mex -setup&#xff1a; 二、安装 如果不支持&#xff0c;没找到&#xff0c;则需要重新安装&#xff0c;下载地址&#xff1a;http://tdm-…

mybatis+spring+c3p0+maven+ehcache

项目截图 pom.xml如下 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

windbg linux内核调试,windbg调试虚拟机XP系统

一、先介绍一下被调试的虚拟机系统环境:虚拟机:vmware workstation 10.0版本虚拟机操作系统: Microsoft windows xp professional 2002 service pack3cpu:2.8GHz,2.64GB内存二、这个没有直接关系。做个笔记而已。1.在XP系统中&#xff0c;创建了一个first.c文件测试代码如下:#i…

VC屏幕截图,保存为Bmp文件

新建一个MFC基于对话框的应用程序&#xff0c;在界面上放一个Button&#xff0c;为其实现点击事件&#xff0c;代码如下&#xff1a; void CScreenShotDlg::OnBtnScreenshot() {RECT rect {0, 0, 1900, 1000};HBITMAP hbmp CopyScreenToBitmap(&rect);SaveBitmapToFile(h…

C#反射技术在多语言实现中的实际用处参考,让初学者学技术有个针对性【附源码】...

做软件&#xff0c;有点儿类似铁人三项比赛&#xff1f;赛跑、射击、游泳? 光某个环节突出&#xff0c;也没多大用&#xff0c;需要整体能力都强&#xff0c;能把整体都可以搞定&#xff0c;才容易得到比赛的胜利&#xff0c;光某一环节非常优秀&#xff0c;也赢得不来整个比…

C语言中的格式化打印printf/sprintf以及嵌入式printf重定向进行DEBUG

一、printf描述 在C语言中&#xff0c;打印函数主要包括printf/sprintf/fprintf/snprintf等等&#xff0c;目的是将“给定的内容”按照“指定的格式”输出到“指定目标内”。通常要使用时&#xff0c;需要包括#inlcude <stdio.h>头文件。 用法为&#xff1a;void print…

华为网卡支持linux,在openwrt下对华为WA633无线AP的千兆网卡驱动进行支持

1.下面是这款AP的全裸图&#xff0c;AP的无线网卡采用了AR9223&#xff0c;PHY采用了博通的BCM5461&#xff0c;主控CPU位octeon 500&#xff0c;射频功放采用的是RF5602方案。由于这款CPU并不常见&#xff0c;我至今未在网上找到它的datasheet&#xff0c;导致我们在玩这款AP的…

hdu120118岁生日

Problem DescriptionGardon的18岁生日就要到了&#xff0c;他当然很开心&#xff0c;可是他突然想到一个问题&#xff0c;是不是每个人从出生开始&#xff0c;到达18岁生日时所经过的天数都是一样的呢&#xff1f;似乎并不全都是这样&#xff0c;所以他想请你帮忙计算一下他和他…

React开发(223):详情页根据数组map处理返回值

<Col span{6}>{isDicTonList &&isDicTonList.map((item, index) > {if (item.key afterDetail.status) {return item.value;}})}</Col>

Linux下C语言实现LCD屏幕截图

From: http://blog.chinaunix.net/uid-24789420-id-3191806.html 一、概述 最近看到网上有人问怎么用C语言实现屏幕截图&#xff0c;刚好自己也在研究Linux驱动&#xff0c;于是花了半天时间把Linux的FrameBuffer驱动看懂了个七八&#xff0c;接着就动手写了个LCD屏幕截图的应…