在c++中usingstd::setw; namespace std;是什么意思

这句做什么用啊?
[问题点数:50分,结帖人qqwangbalu]
本版专家分:170
结帖率 99.02%
CSDN今日推荐
本版专家分:9308
2004年11月 C/C++大版内专家分月排行榜第二
2005年4月 扩充话题大版内专家分月排行榜第三
本版专家分:10626
2005年12月 C/C++大版内专家分月排行榜第一2005年11月 C/C++大版内专家分月排行榜第一
本版专家分:10626
2005年12月 C/C++大版内专家分月排行榜第一2005年11月 C/C++大版内专家分月排行榜第一
本版专家分:700
本版专家分:1318
本版专家分:3466
本版专家分:843
本版专家分:25856
2003年10月 C/C++大版内专家分月排行榜第二
2004年3月 C/C++大版内专家分月排行榜第三
本版专家分:115
本版专家分:34
本版专家分:1
本版专家分:170
匿名用户不能发表回复!
其他相关推荐的作用是什么?-CSDN论坛
的作用是什么?
在好多例子中看到开头都有这么一句,却不知道其是什么意思?
using&namespace&
&请问这一句是什么意思,有什么作用?
std是一个命名空间
C++中引入命名空间的主要是为了处理程序中常见的命名冲突,它是由ANSI&C++引入的可以由用户命名的作用域。所谓命名空间,实际上就是一个由程序设计者命名的内存区域&,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其它全局实体分隔开来。如:
namespace&ns&&//指定命名空间ns
&&&&int&a;
&&&&double&b;
&&&&namespace是定义命名空间所必须写的关键字,ns是用户自己指定的命名空间的名字(可以用任意的合法标识符),在花括号内是声明块,在其中声明的实体称为命名空间成员(namespace&member)。现在命名空间成员包括变量a和b,注意a和b仍然是全局变量,仅仅是把他们隐藏在指定的命名空间中而已。如果在程序中要使用变量a和b,必须加上命名空间名和作用域分辨符“::”,如ns::a,ns::b。这种用法称为命名空间限定,这些名字(如ns::a)称为被限定名。
&&&&C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是设立若干子目录,把文件放到不同的子目录中,不同子目录中的文件可以同名,而调用文件时应指出文件路径。
&&&&命名空间的作用是建立一些相互分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。
&&&&可以根据需要设置多个命名空间,每个命名空间名代表一个不同的命名空间域,不同的命名空间不能同名。这样可以把不同的库中的实体放到不同的命名空间中,或者说,用不同的命名空间把不同的实体隐蔽起来。过去我们用的全局变量可以理解为全局命名空间,独立于所有有名的命名空间之外,它是不需要用namespace声明的,实际上是由系统隐式声明的,存在于每个程序中。
&&&&声明一个命名空间时,花括号内不仅可以包括变量,而且还可以包括一下类型:
变量(可以带有初始化)
函数(可以是定义或声明)
命名空间(在一个命名空间中又定义一个命名空间,即嵌套的命名空间)
namespace&ns1
&&&&const&int&RATE=0.08;
&&&&double&
&&&&double&tax()
&&&&&&&&return&a*RATE;
&&&&namespace&ns2
&&&&&&&&int&
&&&&输出命名空间ns1中的成员的数据,可以采用下面的方法:
&&&&cout&&ns1::RATE&&endl
&&&&cout&&ns1::pay&&endl
&&&&cout&&ns1::tax()&&endl
&&&&cout&&ns1::ns2::age&&endl
&&&&可以看到命名空间的声明方法和使用方法与类差不多。但是他们之间有一点差别:声明类时在右花括号的后面有一分号,而在定义命名空间时,花括号的后面没有分号。
命名空间,不用这个你的cout,cin,endl等等这些都没法用
指定下面定义的变量名字或函数名限定在std作用域中。是为了区分变量的,比如同一个文件中的代码:
using&namespace&
using&namespace&std1;
这样虽然x同名,但编译器编译时偷偷得根据不同的namespace名字,将x区分开了,方便的程序的编写。
using命名空间声明
引入&std&命名空间
命名空间,不加上的话用cin,应该是std::cin,cout同理
和java的import等都是类似的。
解决避免include时引入同名的函数名,变量等
比便移植中出现的重名问题,比如微软有一个全局方法叫AddNumber()保存为命名空间Micro
Sun公司也有一个方法叫AddNumber()
保存为命名空间Sun
这样使用中可以使用Micro::AddNumber()调用微软的方法
而在C++中使用using&namespace&
则是说明需要使用std空间的中的一些方法
如果不在头部生命在main中等地方使用std::cout才可以达到同样的效果
命名空间可以用于&避免命名冲突,还有就是&区分&逻辑关系,主要是写大程序时候用
在c++标准程序库中,使用了明明空间std;
在使用c++标准程序库的任何标志副,可以直接指定标志服所属的命名空间。
一个软件往往由多个模块组合而成,其中包括不同的程序员开发的组建及类库提供的组建,这样不同的组建在对标识符命名是有可能会发生冲突。命名空间(namespace)就是为了解决这个问题而提出的。
一楼的答案很详细。
使用标准库里面的全局定义变量
看了這么多,&我感覺還不是很清楚.&
请问上面的,那我怎么有的时候不用这句,照样还是可以直接的用cin,cout,endl啊?
...你如果是在vc6中,包含#inlude&iostream.h&也是可以的
但是vs2005以后都不行了,一定要用#include&iostream&&using&namespace&
...你如果是在vc6中,包含#inlude&iostream.h&也是可以的
但是vs2005以后都不行了,一定要用#include&iostream&&using&namespace&
...你如果是在vc6中,包含#inlude&&iostream.h&也是可以的&也可以用cin&cout&endl
但是vs2005以后都不行了,一定要用#include&&iostream&&using&namespace&
找本书看看namespace,然后来理解它
引入std命名空间,建议LZ看看这方面的书
就是让你使用命名空间std,入门书籍的前几章为了突出重点一般不会详细解释它的用法,而且都是全局的。
在全局using&namespace&std中cin和cout就像你看到的一样分别是输入输出操作。但是如果你自己定义了另外一个命名空间任然可以使用cin和cout这两个名称,但是他们的用法就和在std中不一样了。可以理解为不同环境中的同一事物的用途不同。全局的意思就是它在程序中的任何地方的作用都是一样的,局部就是只在它所在的那个块起作用。
回复C++ using namespace std 用法深入解析
转载 &更新时间:日 09:18:56 & 作者:
以下是对C++中using namespace 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::
2、使用using关键字。using std::using std::
以上程序可以写成cout && std::hex && 3.4 &&
3、最方便的就是使用
例如:#include &iostream&#include &sstream&#include &string&
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:cout && hex && 3.4 &&因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。&
所以就有了&iostream.h&和&iostream&等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。
命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具下次自动登录
现在的位置:
1. 什么是命名空间
在编程语言中,命名空间是一种特殊的作用域,它包含了处于该作用域中的所有标示符,而且其本身也是由标示符表示的。命名空间的使用目的是为了将逻辑相关的标示符限定在一起,组成相应的命名空间,可使整个系统更加模块化,最重要的是它可以防止命名冲突。就好比在两个函数或类中定义相同名字的对象一样,利用作用域标示符限定该对象是哪个类里定义的。
2. C++中的命名空间定义
在C++语言中,命名空间使用namespace来声明,并使用{ }来界定命名空间的作用域,例如:
namespace foo{
int num=0;
3. C++中的std命名空间
std命名空间是C++中标准库类型对象的命名空间。
在标准C++以前,都是用#include&iostream.h&这样的写法的,因为要包含进来的头文件名就是iostream.h。标准C++引入了名字空间的概念,并把iostream等标准库中的东东封装到了std名字空间中,同时为了不与原来的头文件混淆,规定标准C++使用一套新的头文件,这套头文件的文件名后不加.h扩展名,如iostream、string等等,并且把原来C标准库的头文件也重新命名,如原来的string.h 就改成cstring(就是把.h去掉,前面加上字母c),所以头文件包含的写法也就变成了#include &iostream&。
并不是写了#include&iostream&就必须用我们通常这样的写的原因是为了一下子把std名字空间的东东全部暴露到全局域中(就像是直接包含了iostream.h这种没有名字空间的头文件一样),使标准C++库用起来与传统的iostream.h一样方便,但并不建议这样做,因为使用的话就没有起到命名空间的作用。再次回到了如同没有涉及命名空间时,所有标示符都定义在全局作用于中的混乱情况,不利于程序员创建新对象。
如果不用使用标准库时就得时时带上名字空间的全名,如std::cout && &hello& && std::
&iostream&和&iostream.h&是不一样,前者没有后缀,实际上,在编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用&iostream.h&时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用&iostream&的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。
如下写法,则出错
#include &iostream.h&
所以 要么写成
#include &iostream&
using std::
using std::
using std::
#include &iostream.h&
当然最好是前种,因为后种情况如果遇到用户定义的标示符在头文件中已经定义,可能会导致错误,采用using namespace std也是如此。
4. 命名空间实际上是一个作用域
在x.h中的内容为
namespace MyNamespace1
class MyClass
在y.h中的内容为
namespace MyNamespace2
class MyClass
然后在z.cpp中引入x.h和y.h
#include &x.h&
#include &y.h&
void z::f()
//声明一个文件x.h中类MyClass的实例x
MyNamespace1::MyC
//声明一个文件x.h中类MyClass的实例x
MyNamespace2::MyC
//调用文件x.h中的函数f
//调用文件y.h中的函数f
5. 使用标准库中标示符的方法
使用标示符限定命名空间:std::cout&&&Hello!&&&
使用using std::事先声明:cout&&&Hello!&&& //分别引入,需要用哪个引用哪个,保证程序中名称的唯一性
使用using naspace std声明:cout&&&Hello!&&& //引入名字空间的所有内容,不推荐这样写
因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了&iostream.h&和&iostream&等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准库的名称,标准库为了和以前的头文件区别,一般不加&.h&
C++语言是从C语言发展起来的,因此有很多借鉴的地方。当C++语言推出但尚未标准化以前(98年才标准化),市场上已经有了很多版本的程序库了,各库林立,导致互相应用时出现了一个很难调和的难题,那就是命名冲突,又称名空间泛滥。比如某个库写了个函数line(int x,int y);不巧另外一个库又写了个类这下编译器该匹配哪个呢?只好取决于哪个库文件先被引用到文件中,并且把另外一个完全屏蔽掉。这显然不是一个好的方法。在标准库的产生过程中,这个问题被提了出来。为此,标准库组织决定在标准库中引入名空间的概念,所有标准库的组件都在名空间std中定义,由用户手动引入到程序中,这样就让编译器知道,当遇到一个可能冲突的名称时,以标准库中定义的名称为主,如果想用标准库外定义的名称,那程序员需要自己注明另外的名空间,从而达到消除名空间泛滥的目的。using namespace std;的写法引入了名空间的所有内容,这是一种简单但不保险的做法,是标准库组织不推荐这么做的。因为这样引入了所有的组件函数名,相当于重新引发了名字空间泛滥的问题。为此,好的做法应该是第二种分别引入。
【上篇】【下篇】
您可能还会对这些文章感兴趣!
外部的引用: 1 条
c++标准库—命名空间std和头文件的演变 & 求索阁
百度站内搜索
同分类最新文章在c++中什么时候需要加上using namespace std?什么时候不加?有什么意义?_百度知道
在c++中什么时候需要加上using namespace std?什么时候不加?有什么意义?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
那是命名空间,你所用到的很多函数或者类都是被放到命名空间里面的,命名空间是防止名字重复而使用的,比如STL有个类叫string,而你也设计一个类叫string,那么编译器编译的时候就搞不清楚到底是那个string,所以用一个命名空间就比较方便了。具体是这么回事的,比如有两个班级,A班和B班,两个班各有一个叫张三的人,而两个班的同学相互之间都是非常熟悉的。那么他们聊天的时候说张三,那其他人肯定会问,哪个张三?对吧,因为搞不清楚到底说的是哪个,所以会犯迷糊。而这个时候,那个人会补充,A班的张三或者B班的张三,这样,其他人就知道到底是谁了。这里的A班,B班就好像命名空间一样,而张三就好像那个string,或者说是对象,变量或者函数。当你自己定义一个string并把它放到命名空间AAA中的时候,你使用string只要指定是哪个命名空间的,就不会导致编译器分不清是哪个string了。你使用时会用std::string或者AAA::string,前者告诉编译器我用的string是在命名空间std里面的,后者告诉编译器用的string是在命名空间AAA里面的。这样,编译器就一目了然,不会出错。但是你却发现每次只要用到string都必须在前面加上AAA,这样相当麻烦,有没有办法简化操作呢?当然有,就好像上面的例子,那些人聊天之前,他可以告诉其他人说,注意,下面说到张三都是说的B班的,那么其他人就知道,后面只要出现张三都是在说B班的,不是A班的了。很多文章里面也有这样的情况啊,一般注明是以下简称什么什么的,就是为了避免重复,导致混淆。而程序一样的,你可以先告诉编译器你用的string是哪个命名空间的。就要用到这句了。这样告诉编译器,我没有指定命名空间的,就默认使用std这个命名空间,那么你使用string就不用再加std::作用域了。只需要直接写string就可以了,编译器就知道你说的是哪个string了。这就是命名空间的作用。希望你能明白,祝学习进步~!
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 usingstd::cout 的文章

 

随机推荐