c++ using namespace详解
当前位置:以往代写 > C/C++ 教程 >c++ using namespace详解
2019-06-13

c++ using namespace详解

c++ using namespace详解

副标题#e#

所谓namespace,是指标识符的各类可见范畴。C++尺度措施库中的所有标识符都被界说于一个名为std的namespace中。

一 :

<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++代码,一个是为了支持新的尺度。


#p#副标题#e#

定名空间std封装的是尺度措施库的名称,尺度措施库为了和以前的头文件区别,一般不加".h"

本日用了VISUAL C++写了个小措施(VS2005),很简朴很简朴的,可是就是编译不通过呈现一个奇怪的问题:错误 1 error C2668: “max”: 对重载函数的挪用不明晰

最初代码如下

#include <iostream>
using namespace std;

template <typename T>
T max (T a,T b)
{
return ((a>b)?a:b);
}
void main()
{
double x,y;
cin>>x>>y;
cout<<"Max number is "<<(max(x,y))<<endl;
cin>>x;
}

我将这段代码放到VC++ 6.0下竟然通过了,措施运行也正常。这让我百思不得其解。厥后终于弄大白了!

其实在std定名空间下尚有一个MAX函数,并且实现的成果也是一样的……我昏。操作转到界说成果可以看到微软是怎么写MAX函数的。这里为了不被藐视就不贴微软的代码了。

大白了为什么呈现这个错误我们就改写代码如下:

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

template <typename T>
T max (T a,T b)
{
return ((a>b)?a:b);
}
int main()
{
double x,y;
cin>>x>>y;
cout<<"Max number is "<<(max(x,y))<<endl;
cin>>x;
}

这是我较量推荐的做法,因为C++ PRIMER, EFFECTIVE C++上都是用这种方法的,可是谭浩强的书上都是一句using namespace std;就搞定,我以为蛮简捷的就一直用了,没想到带来那么多的问题,以前在友元函数上还遇到莫名的错误呢。

其实尚有两个简朴的办理方案,那就是把本身界说的函数改成其他的名字,可能直接用微软提供的函数。相信微软提供的效率绝对不会比我们写的低~好了,就写到这了。但愿各人养成精采的编程习惯,^-^

    关键字:

在线提交作业