关于using namesapce std

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 

       很多C++初学者都会碰到这样的问题,在需要进行输入输出时,需要使用using namespace std;却在编译时提示为定义的变量std。主要解释有几下几点:

一 :

<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 

后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 

因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

二:

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

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

由于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"

 

C++ using namespace std 详解  一 :和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,当使用时,相当于在c中调用库函数,使用的是全 阅读详情

相关推荐

iostream>和<iostream.h>的区别

C++标准库头文件是标准C++的一部分,可以在不同的C++编译器上使用。而<iostream.h>是早期的C++编译器使用的头文件,可能不被所有的C++编译器所支持。综上所述,C++标准库头文件是标准C++的一部分,可以提供更好的可移植性和使用方式的规范性,而<iostream.h>是早期C++编译器使用的头文件,已经不再推荐使用。在C++标准库中,是标准输入输出流的头文件,而<iostream.h>是早期的C++编译器使用的头文件。而使用<iostream.h>的代码不需要使用命名空间。

qq_43592674的博客 1597

关于iostream.h与iostream的区别

iostream.h与iostream的区别: iostream.h里面定义的所有类以及对象都是在全局空间里,所以可以直接用cout 。但在iostream里面,它所定义的东西都在名字空间std里面,所以必须加上 using namespace std;才能使用cout。(C++中一个带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者改进很多之外,还有一点就是后者很多东西都定义在“std”名字空间中。) iostream要使用更新的编译

erci_fc的博客 5599

nameplace关键字(命名空间)

1.命名空间 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的。 命名空间本质是开辟一个新的作用域,在这个空间中可以定义变量,函数和类型。值得注意的是,命名空间里开辟的变量是全局变量。 1.2 命名空间的定义 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。 nameplace A //正常使用 { int a = 0;//定义变量 i

m0_62616069的博客 830

【命名空间】using namespace std是什么意思?

详尽讲解C++中命名空间的相关知识

罅隙的博客 9万+

C++ 名字空间namespace

在C++中支持三种域:局部域、名字空间域和类域。名字空间域是随标准C++而引入的。花括号括起来的部分称声明块。声明块中可以包括:类、变量(带有初始化)、函数(带有定义)等。最外层的名字空间域称为全局名字空间域,即文件域。名字空间的引入,主要是为了解决全局名字空间污染问题,即防止程序中的全局实体名与其他程序中的全局实体名命名冲突。一个名字空间就定义了一个新的作用域,命名空间中所有内容都局限于该命名空间中。

NuYoaH502329的博客 343

【C++】 为什么建议代码尽量不要使用 using namespace std

using namespace std; 首先我们要知道,这句代码的意思是:打开std 的标准命名空间。 在std 标准空间里,包含了原来的库和头文件。但是在C++ 中因为要使用的STL中有部分名称是没有加下划线的保留标记的,而这些名称如果再用在自己的源代码中会引发未定义的后果。 它们提供的内容和相应的旧的C头文件相同,只是内容在 std 中,所以当我们在写成熟的代码的时候,一般不建议将标准命名空...

ly_6699的博客 2万+

using namespace std

在开头写using namespace std 后面可以直接写cin cout 不然得写std::cin stc::cout 两种写法都对 。

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 182

using namespace std 不识别_.NET Core使用微软AI认知服务识别文字语言

点击上方蓝字关注“汪宇杰博客”识别一段文字的语言有多种途径,在这个以AI为热点的时代,我们也可以给自己的应用强行加上AI,然后就能加上“智慧”的名字“自主研发成功”后去吹牛逼。今天我带大家来看看如何使用微软智慧云Azure提供的AI认知服务来识别一段文字的语言。本文的前提条件是你得有一个Azure国际版的订阅,免费试用的也行。新建Azure认知服务账户点击"Create a resouc...

weixin_39800112的博客 204

Namesapce命名空间的使用

Namesapce命名空间的使用 Using namespace std到底是什么意思? Iostream这个头文件中的cout,endl,cin等等都属于标准输入输出流,为了和其他同命名的变量区分开,故进行如下操作: 使用using namespace std #include<iostream> usingnamespacestd;//这里的namespace的作用是将iostream中的标准输入输出流文件添加std命名空间 intmain() {...

超级霸霸强的博客 193

C++入门——命名空间

C++入门——命名空间

Maple_land的博客 1671

【C++】命名空间 namespace

本讲基本要求      * 掌握:命名空间的作用及定义;如何使用命名空间。      * 了解:使用早期的函数库  重点、难点      ◆命名空间的作用及定义;如何使用命名空间。     在学习本书前面各章时,读者已经多次看到在程序中用了以下语句: using namespace std; 这就是使用了命名空间std。在本讲中将对它作较详细的介绍。 一、 为什么需要命名空间    ...

Twinkle 1218

namespace在大型项目中的使用

命名空间namespace      namesapce命名空间是在大型项目开发中,为了避免命名冲突而引入的一种机制,比如说,在一个大型项目中,要用到多家软件开发商提供的类库。在事先没有约定的情况下,两套类库可能存在同名的函数或者是全局变量而产生冲突。项目越大,用到的类库越多,开发人员越多,这样的冲突也就越明显。       所以在C++中,为了避免这种问题的发生,引入了命名空间,namesp

HelloGoogle 2202

关于在vs2013中的一个错误

原来的代码是:vector vec1(0.1,0.1); vector vec2(0.2,0.2); 两句话出现了26个错误: 错误    10    error C2868: “std::iterator_traits::value_type”: 非法的 using 声明语法;应输入限定名    d:\program files\vs\vc\include\xutility    3

ddsszzy的专栏 3804

C++ Primer第八章答案

//8.1 #include<iostream> #include<stdexcept> using namespace std; istream &f(istream & in) { int file; while (in>>file, !in.eof())//直到文件结束符才停止读取 { if (in.bad()) thr...

qq_38619342的博客 411

C++实例——第三章

例3-1 编写一个求x的n次方的函数 //3_1.cpp #include <iostream> using namespace std; //计算x的n次方 double power (double x,int n){ double val=1.0 while(n--) val *= x; return val; } int main(){ cout<<"5 to the power 2 is"<<power(5,2)<<endl;

weixin_45965693的博客 690

GetMemory函数详解

#include #include #include using namespace std; char *GetMemory(char *&p, int num) { p = (char *)malloc(sizeof(char)*num); //p = new char[num]; return p; } int main(void) { char *

a3125504x的博客 524
上一篇: 新博开放
下一篇: VC在一个工程中实现多语言版本(转)
Bilter
博客等级 码龄21年 87粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值