C++名称空间

本文详细介绍了C++中名称空间的概念及其使用方法,包括声明区域、潜在作用域、名称空间的声明方式、如何使用名称空间等内容,并通过示例代码帮助读者理解。

c++名称空间

 

1.声明区域和潜在作用域

i>声明区域

声明区域就是可以进行声明的区域:

  1. 函数外(全局)
  2. 函数内(代码块)

ii>潜在作用域

潜在作用域:从声明处开始声明区域结束

“潜在”的含义:主要是因为同名局部变量可以隐藏全局变量,注意,仅仅是隐藏,我们仍然可以使用。

int b = 3;
int main() {

    int b = 1;
    cout << ::b << endl;// ::为域解析符号
}

输出:

3

2.名称空间的声明

一个特殊的名称空间:全局名称空间(文件级的声明区域)

在哪里声明?

代码块之外,另一个名称空间之内(名称空间的嵌套)

namespace <名称空间名> {
    ...
}

名称空间中可声明:变量,函数,结构, 另一个名称空间(名称空间可嵌套)

函数原型于函数定义可以分别在两个文件中的同名名称空间声明

头文件

/* xxx.h */
namespace <名称空间名> {
    ...//其他变量,结构等

    void f();
    void g();
}

cpp文件

/* xxx.cpp */
namespace <名称空间名> {

    void f(){
        ...
    }

    void g(){
        ...
    }
}   

全局名称空间的名称,可以通过::限定
还是这个例子

int b = 3;
int main() {

    int b = 1;
    cout << ::b << endl;// ::为域解析符号
}

输出:

3

3.使用名称空间

首先,若在头文件中声明,首先要包含头文件

i>通过 :: 域解析符直接使用

由于名称空间声明在代码块之外(这里不考虑嵌套),所以,名称空间具有文件作用域

因此,可以使用 名称空间名 :: 名称 来使用名称空间内的名称

namespace name {
    int a = 3;
}

int main() {

    cout << name::a << endl;
    return 0;
}

ii>通过using声明——使特定名称具有代码块作用域/文件作用域

1.局部声明,有代码块作用域

namespace name {
    int a = 3;
}

int a = 1;

int main() {

    using name::a;

    cout << a << endl;//这里的a有局部特性,隐藏全局命名空间的a(值为1的a)
    //cout << ::a << endl;为输出全局命名空间的a(值为1)
    return 0;
}

输出:

3

using声明所具有的局部特性: 

  1. 在using声名的代码块内部(对应上面的例子就是main()中),不得有同名的局部变量,否则会冲突报错
  2. 会隐藏全局变量,如上例所示

 

2.全局声明,文件作用域

#include <iostream>
namespace name {
    int a = 3;
}

using name::a;

int main() {
    using std::cout;
    using std::endl;
    int a = 1;
    cout << a << endl;
    return 0;
}

输出:

1

可见,全局使用具有全局特性

iii>通过using编译指令——保留全局特性,隐式的域解析运算

namespace name {
    int a = 3;
}

int main() {
    using namespace name;

    cout << a << endl;
    return 0;
}

using编译指令所在的区域,可以直接使用名称,相当于加了域解析运算

全局特性:

namespace name {
    int a = 3;
}

int main() {
    using namespace name;

    int a = 1;
    cout << a << endl;
    return 0;
}

输出:

1

可以看到,局部变量隐藏了全局,所以,使用using编译指令,名称空间中的名称具有全局特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值