C++ namespace命名空间

  1. 同一个作用域只能存在一个变量的声明,不管这个变量属于哪个命名空间。

举例:

#include <stdio.h>
#include <errno.h>

int a = 0;

namespace ns1
{
    int a = 1;
}

namespace ns2
{
    int a = 2;
}

using ns1::a;

int main(void)
{
    printf("a=%d\n", ns1::a);
    return 0;
}

编译:

namespace.cpp:16:12: error: ‘int ns1::a’ conflicts with a previous declaration
 using ns1::a;
            ^
namespace.cpp:4:5: note: previous declaration ‘int a’
 int a = 0;
     ^

程序最开始的int a = 0; 属于全局命名空间,程序16行同时可见两个同名变量,冲突发生。

  1. 局部代码范围的局部变量可以优先于外部命名空间的变量

举例:

#include <stdio.h>
#include <errno.h>

int a = 0;

namespace ns1
{
    int a = 1;
}

namespace ns2
{
    int a = 2;
}

using namespace ns1;
using namespace ns2;

int main(void)
{
    int a = 3;
    printf("a=%d\n", a);
    return 0;
}

编译运行:

a=3

  1. 局部区域可以使用using XXX::yyy语句,从而使该命名空间的变量的作用域在当前局部区域,局部区域外的其他命名空间的同名变量不起作用。

#include <stdio.h>
#include <errno.h>

int a = 0;

namespace ns1
{
    int a = 1;
}

namespace ns2
{
    int a = 2;
}

using namespace ns1;
using namespace ns2;

int main(void)
{
    using ns1::a;

    printf("a=%d\n", a);
    return 0;
}

运行结果:

a=1

  1. 多个文件共用一个命名空间时,命名空间的内容会进行合并。

例如:

namespace.cpp

#include <stdio.h>
#include <errno.h>

int a = 0;

namespace ns1
{
    int a = 1;
}

namespace ns2
{
    int a = 2;
}

namespace ns3
{
    extern int n3;//from ns3.cpp
    int b = 4;
}

using ns3::b;
using ns3::n3;

int main(void)
{
    using ns2::a;

    printf("a=%d, b=%d, n3=%d\n", a, b, n3);
    return 0;
}

ns3.cpp

#include <stdio.h>
#include <errno.h>

namespace ns3
{
    int n3 = 3;
}

编译运行:

g++ -o namespace namespace.cpp ns3.cpp

$ ./namespace

a=2, b=4, n3=3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值