C++中将using编译指令用于名称空间

C++中将using编译指令用于名称空间

我们并不希望每次使用名称时都对它进行限定,因此C++提供了两种机制(using声明和using 编译指令)来简化对名称空间中名称的使用。using声明使特定的标识符可用,using编译指令使整个名称空间可用。
using 声明由被限定的名称和它前面的关键字 using 组成:

using Jill::fetch; // a using declaration

using 声明将特定的名称添加到它所属的声明区域中。例如 main() 中的 using 声明 Jill::fetch 将 fetch 添加到 main() 定义的声明区域中。完成该声明后,便可以使用名称 fetch 代替 Jill:fetch。下面的代码段说明了这几点:

namespace Jill {
    double bucket(double n) { ... }
    double fetch;
    struct Hill { ... };
}

char fetch;
int main()
{
    using Jill::fetch; // put fetch into local namespace
    double fetch;      // Error!Already have a local fetch
    cin >>fetch;       // read a value into Jill::fetch
	cin >>::fetch;     // read a value into global fetch
    ...
}

由于 using声明将名称添加到局部声明区域中,因此这个示例避免了将另一个局部变量也命名为 fetch.另外,和其他局部变量一样,fetch也将覆盖同名的全局变量。参见【0voice C++】在函数的外面使用 using声明时,将把名称添加到全局名称空间中:

void other();
namespace Jill {
    double bucket(double n) { ... }
    double fetch;
    struct Hill { ... };
}

using Jill::fetch; // put fetch into global namespace
int main()
{
    cin >>fetch;// read a value into Jill::fetch
    other()
        ...
}

void other()
{
    cout << fetch;// display Jill::fetch
    ...
}

using 声明使一个名称可用,而 using编译指令使所有的名称都可用。using 编译指令由名称空间名和它前面的关键字 usingnamespace 组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符:

using namespace Jack; //make all the names in Jack available

在全局声明区域中使用using编译指令,将使该名称空间的名称全局可用。这种情况已出现过多次:

#include <iostream>  //places names in namespace std
using namespace std; //make names available globally
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值