栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++知识点-命名空间

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++知识点-命名空间

文章目录

命名空间的特性声明命名空间和命名空间成员全局命名空间不连续命名空间嵌套命名空间using声明和using编译指令命名空间别名综合代码示例Reference
C++标准提供了命名空间的工具,其作用很简单也很好理解,为了就是解决多个库之间同名对象的冲突问题,这和Java中包的作用是一样的。

命名空间的特性

首先熟悉一下命名空间的两个概念。

声明区域:可以在其中进行声明的区域,如全局文件的声明区域是文件,函数内声明的变量声明区域为代码块。潜在作用域:潜在作用域从声明点开始,到其声明区域的结尾。因此潜在作用域比声明区域小,因为变了必须定义后才能使用。
这两个概念通过下图很好理解,也是编程的常识。

声明命名空间和命名空间成员

可以使用如下语法声明命名空间和空间成员

namespace Jack {
	double a;
	struct b {};
	void f();
}
全局命名空间

如果未在显式命名空间中声明某个标识符,则该标识符属于隐式全局命名空间的一部分。 一般情况下,尝试避免在全局范围内进行声明(入口点 Main 函数除外,它必须位于全局命名空间中)。
全局命名空间可以是用 ::var 来调用。

不连续命名空间

即同一个命名空间可以在多个文件中定义,如
file1.cpp

namesapce A {
	int a;
}

file2.cpp

namesapce A {
	int b;
}

在编译时会将分散在各个文件中的同一个命名空间集合在一起。

嵌套命名空间

命名空间也是可以嵌套的

namespace A {
	namespace B {}
}
using声明和using编译指令

using声明将特定的名称添加到它所属的声明区域中,例如using A::a;,相当于 Java 中的静态导入,而using 编译指令使名称空间的所有名称都可以用,而不需要使用作用于解析符,如 using namespace std;,作用相当于 Java 中的。import java.util.*。这里记录一下注意点。

using A::pal;
using B::pal; // error declaration conflict
pal = 4;

上述代码会引起冲突。
一般而言使用using声明会更安全点。

命名空间别名

命名空间名称必须是唯一的,这意味着通常它们不应太短。 如果名称的长度使代码难以读取,或在不能使用 using 指令的标头文件中键入枯燥,则可以创建一个命名空间别名作为实际名称的缩写。 例如:

namespace a_very_long_namespace_name { class Foo {}; }
namespace AVLNN = a_very_long_namespace_name;
void Bar(AVLNN::Foo foo){ }
综合代码示例
#include 

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

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

int main(int argc, char *argv[]) {
    cout << "A::a =" << A::a << endl;
    cout << "A::B::a =" << A::B::a << endl;
    cout << "a =" << a << endl;
    cout << "::a =" << ::a << endl;

    int a = 30;
    cout << "a =" << a << endl;
    cout << "::a =" << ::a << endl;

    return 0;
}

output:

A::a =100
A::B::a =20
a =200
::a =200
a =30
::a =200
Reference
    《C++ Primer Plus》命名空间 (C++)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735801.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号