HOME/CPP Primer/

3.1

Article Outline
TOC
Collection Outline

3.1 命名空间的using声明

目前为止用到的库函数基本上都属于命名空间std,而程序也显式地将这一点标示出来了。作用域操作符(::)的含义是:编译器应从操作符左侧名字所示的作用域中寻找右侧的名字,因此,std::cin的意思就是要使用命名空间std::中的名字cin。

使用using声明无须专门的前缀也能使用所需的名字。using声明具有如下的形式:

using namespace::name;

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

#include <iostream>

using std::cin;

int main()
{
    int i;
    cin >> i;           // 正确:cin和std::cin含义相同
    cout << i;          // 错误:没有对应的using声明,必须使用完成的名字
    std :: cout << i;   // 正确:显式地从std中使用cout
    return 0;
}

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

按照规定,每个using声明引入命名空间中的一个成员。重写1.2节的程序如下:

#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;
}

头文件不应包含using声明

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