C++命名空间

相较于C语言来说,C++提供了命名空间,在进行多人协作的时候,能够解决变量与函数名重复的问题

iostream与iostream.h

C++与C头文件的标准不同

初学C++时,我对using namespace std感到有些困惑,原来在iostream里面,它所定义的东西都在名字空间std中

#include<iostream>
using namespace std;
______________________________________________________________
#include<iostream.h>//在C++标准中不支持

在iostream.h中定义全局命名空间,而在iostream中并未定义命名空间

命名空间的相关定义代码

命名空间的定义基本代码如下

namespace namespace_name
{
   
}

在调用命名空间中的内容时,用到 :: 符号,以下是相关介绍

::表示作用域,和所属关系。
::是运算符中等级最高的,它分为三种:
1)global scope(全局作用域符),用法(::name)
2)class scope(类作用域百符),用法(class::name)
3)namespace scope(命名空间作用域符),用法(namespace::name)
他们都是左关联(度left-associativity)

调用的代码如下

name::code;  // code 可以是变量或函数


using namespace指令

该指令会使后续的代码使用指定的命名空间中的名称,示例如下

using namespace std;

注意:using 指令引入的名称遵循正常的范围规则。名称从使用 using 指令开始是可见的,直到该范围结束。此时,在范围以外定义的同名实体是隐藏的。

同时也可以指定特定的项,例如

using name::code;

这样在之后的代码里就不需要前缀了


不连续的命名空间

在分开的部分中,将代码定义到一个共同命名空间
代码同一般的定义代码

namespace namespace_name
{
   
}

最后使用的就是命名空间各部分的总和


命名空间的嵌套

运用::运算符一级级的进行访问

namespace namespace_name1 
{
   
   namespace namespace_name2 
   {
      
   }
}
using namespace namespace_name1::namespace_name2;

在使用namespace_name1时便包括了namespace_name2中的内容

但是当namespace_name1中的命名与namespace_name2中的命名重复的时候,是以选择的一级为优先,即有重复时要具体到那一级。

#include <iostream>
using namespace std;
namespace A
{
    int a = 100;
    namespace B            
    {
        int a =20;
    }
}
using namespace A

int main(int argc, char *argv[])
{
  	
    cout <<"a ="<<a << endl;//输出为a = 100即命名空间A中的

    return 0;
}

全局变量 a 可以表达为 ::a,用于当有同名的局部变量时来区别两者。例如:

#include <iostream>
using namespace std;
namespace A
{
    int a = 100;
    namespace B            //嵌套一个命名空间B
    {
        int a =20;
    }
}

int a = 200;//定义一个全局变量


int main(int argc, char *argv[])
{
    int a = 30;
    cout <<"a ="<<a << endl;//输出30
    cout <<"::a ="<<::a << endl;//输出200
    return 0;
}

注意:使用多个命名空间时内容是不能够重复的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值