using namespace std的一些说明

本文详细介绍了C++中命名空间(namespace)的概念及其使用方法。解释了如何通过命名空间避免变量和函数重名的问题,并探讨了using namespace的作用及可能引起的歧义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   本文整理自网络。

0、概述

   对于一个存在着标准输入输出的C++控制台程序,一般会在#include 的下一行发现一句话,using namespace std。这句话其实就表示了使用的标准库函数都是标准命名空间std中的函数。其作用就在于避免发生重命名的问题。

1. 关于namespace
  C++引入了命名空间namespace主要解决了多个程序员在编写同一个项目中可能出现的函数等重名的现象。 解决方法就是加上自己的命名空间。比如下面的例子:
 
#include
using namespace std;
 
namespace space1
{
     int a=10;
}
namespace space2
{
     int a=5;
}
 
void main()
{
     int a=1;
     cout<< "space1定义的a=" <<space1::a<<endl;
     cout<< "space2定义的a=" <<space2::a<<endl;
     cout<< "主函数定义的a=" <<a<<endl;   
}
  上例中的“ space1::a”和“ space2::a”分别表示了调用 space1命名空间中的a变量和 space2命名空间中的a变量。这样的好处显而易见,那就是虽然 space1space2都定义了一个变量a,但是并不会出现重名的危险。
运行结果为:
  using <wbr>namespace <wbr>std的一些说明
  
2. 关于using namespace *
  顾名思义,它就是说使用某个表空间,包括里面的函数,变量等。好处在于我们在程序里面就不用在每个函数的头上都加上*::来调用。比如说如果上面那个程序,如果我们不在using namespace std,那么我们就需要在主函数中的标准输出流cout函数前面加上std,写成std::cout表示调用std空间里面的标准输出流cout。但是有些时候我们也不能图这个方便,比如说如果在主函数中将命名空间 space1space2的中所定义的变量释放出来,如下例1:
 
#include
using namespace std;
 
namespace space1
{
     int a=10;
}
namespace space2
{
     int a=5;
}
 
void main()
{
     int a=1;
     using namespace space1;
     using namespace space2;
     cout<<a<<endl;
}
这个程序输出结果为:
using <wbr>namespace <wbr>std的一些说明
如果我们在主函数中把 int a=1给删除,如下例2:
 
#include
using namespace std;
 
namespace space1
{
     int a=10;
}
namespace space2
{
     int a=5;
}
 
void main()
{
     using namespace space1;
     using namespace space2;
     cout<<a<<endl;
}
会发现根本就不会通过编译,输出的错误信息为:
error C2872: “a”: 不明确的符号
  分析可以看出,上面这个例2会引起歧义。因为既使用的命名空间 space1里的a,又使用了命名空间 space2里的a,那么编译器就不知道到底哪个才是需要输出的a,自然就会引起歧义了。同理,在例1中,编译器同样不知道到底哪个才是需要输出的a,但是主函数的里的a覆盖了 space1space2里面的a,只会输出1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值