成语| 古诗大全| 扒知识| 扒知识繁体

当前位置:首页 > 趣味生活

在namespace中使用std

Q1:C++中“using namespace std”表示什么意思?

使用std命名空间
98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题。举一个实例,请注意以下两个头文件:
// one.h
char func(char);
class String { ... };
// somelib.h
class String { ... };
如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。
所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。比如:
// one.h
namespace one
{
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib
{
class String { ... };
}
现在就算在同一个程序中使用String类也不会发生冲突了,因为他们分别变成了:one::String()以及Somelib::String()
这样,就可以通过声明命名空间来区分不同的类或函数等了。
比如C++标准库定义了命名空间:std,其中包含容器vector,示例如下:
#include "stdafx.h"
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
const int arraysize = 7;
int ia[arraysize] = {0,1,2,3,4,5};
file://定义容器vector
vector ivect(ia,ia+arraysize);
vector::iterator it1 = find(ivect.begin (),ivect.end (),4);
if(it1 == ivect.end ())
cout<<"4 not found "< else
cout<<"4 found "<<*it1< return 0;
}
输出结果为:4 found 4.
龙行虎步的伟岸英姿;

Q2:在c++中什么时候需要加上using namespace std?什么时候不加?有什么意义?

那是命名空间,你所用到的很多函数或者类都是被放到命名空间里面的,命名空间是防止名字重复而使用的,比如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是哪个命名空间的。就要用到这句了。using namespace std;这样告诉编译器,我没有指定命名空间的,就默认使用std这个命名空间,那么你使用string就不用再加std::作用域了。只需要直接写string就可以了,编译器就知道你说的是哪个string了。这就是命名空间的作用。希望你能明白,祝学习进步~!

Q3:C++中using namespace std是什么意思?

有些名字容易冲突,所以会使用命名空间的方式进行区分,具体来说就是加个前缀。比如C++标准库里面定义了vector容器,你自己也写了个vector类,这样名字就冲突了。于是标准库里的名字都加上std::的前缀,你必须用std::vector来引用。同理,你自己的类也可以加个自定义的前缀。
但是经常写全名会很繁琐,所以在没有冲突的情况下你可以偷懒,写一句using namespace std;,接下去的代码就可以不用写前缀直接写vector了。

Q4:use namespace std怎么用啊?

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
一 :
是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
后缀为。h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带。h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀。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
#include
#include
using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:

猜你喜欢

更多