【C++基础】第十三课:命名空间的using声明

命名空间

Posted by x-jeff on January 12, 2020

【C++基础】系列博客为参考《C++ Primer中文版(第5版)》C++11标准)一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.using声明

在之前的博客:【C++基础】第二课:C++的输入与输出中,我们已经提过了命名空间的作用和用法。

到目前为止,我们用到的库函数基本上都属于命名空间std。但是如果我们每次使用标准库中的函数时都需要加上std::是非常繁琐的一件事情。

因此,为了简化这个过程,可以使用using声明:

1
using namespace::name;

一旦声明了上述语句,就可以直接访问命名空间中的名字:

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using std::cin;
int main()
{
    int i;
    cin>>i;//正确
    cout<<i;//错误:没有对应的using声明,必须使用完整的名字
    std::cout<<i;//正确
    return 0;
}

1.1.每个名字都需要独立的using声明

按照规定,每个using声明引入命名空间中的一个成员。例如,可以把要用到的标准库中的名字都以using声明的形式表示出来:

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    cout<<"Enter two numbers:"<<endl;
    int v1,v2;
    cin>>v1>>v2;
    cout<<"The sum of "<<v1<<" and "<<v2<<" is "<<v1+v2<<endl;
    return 0;
}

⚠️也可以使用如下代码将标准库中的所有库函数全部包含进来:

1
using namespace std;

1.2.头文件不应包含using声明

位于头文件的代码一般来说不应该使用using声明。这是因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突。