C++名称空间特性

目录
  • 一、名称空间特性
    • 1.嵌套
    • 2.传递
    • 3.别名
    • 4.匿名名称空间

文章转自微信公众号:Coder梁(ID:Coder_LT)

一、名称空间特性

1.嵌套

我们可以将名称空间声明进行嵌套:

namespace elements {
    namespace fire {
        int flame;
        ...
    }
    float water;
}

我们观察一下可以发现这里的flame位于elements::fire当中,所以当我们使用解析运算符使用它的时候写成:elements::fire::flame。

同样,我们也可以使用using编译指令引入fire名称空间:

using namespace elements::fire;

2.传递

并且我们还可以把using编译指令和using声明应用在名称空间当中:

namespace myth {
    using Jill::fetch;
    using namespace elements;
    using std::cout;
    using std::cin;
}

假设我们要访问Jill::fetch,由于它已经被引入myth当中了,所以我们可以这样访问:

std::cin >> myth::fetch;

并且using编译指令是可以传递的,A 引入了B,B引入了C,等价于A也引入了C。比如当我们运行using namespace myth;,由于myth当中引入了elements,等价于同时运行了这两条:

using namespace myth;
using namespace elements;

3.别名

我们还可以给名称空间创建别名,例如:

namespace my = myth::elements::fire;
using my::flame;

在上面这个例子当中,我们将别名和名称空间的嵌套结合在了一起使用。其实有一点像是将名称空间当成是一种特殊变量处理的感觉。

4.匿名名称空间

我们还可以省略名称空间的名称来创建匿名名称空间。

namespace {
    int ice;
    int bandy;
}

它相当于后面跟着using编译指令一样,也就是说匿名的名称空间的潜在作用域为从声明点到该声明区域末尾。从这点来看,它与全局变量相似。但由于它是匿名的,所以无法在其他文件当中使用using关键字引入,所以不能在其他文件使用,某种意义上有些类似于链接性为内部的静态变量。

到此这篇关于C++名称空间特性的文章就介绍到这了,更多相关C++名称空间内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++ 名称空间详情

    目录 一.传统的C++命名空间 二.新的命名空间特性 1.using声明和using编译指令 2.名称空间的其他特性 一.传统的C++命名空间 声明区域(declaration region): 声明区域是可以在其中进行声明的区域.例如,可以在函数外面声明全局变量,对于这种变量,那么它的声明区域为其声明所在的文件.对于在函数中声明的变量,声明区域为其声明所在的代码块. 潜在作用域(potential scope): 变量的潜在作用域从声明点开始,到其声明区域的结尾.因此潜在作用域比声明区域小,这

  • C++名称空间介绍

    目录 1.名称空间 1.1传统C++名称空间 1.2新的名称空间特性 1.名称空间 在C++当中,名称可以是变量.函数.结构体.枚举.类以及结构体和类的成员.这本身并没有问题,但随着项目的增大,名称之间相互冲突的可能性也会大大增加. 比如我们使用了多个厂商的代码,它们都定义了List,Tree和Node类,但定义的方式不同,也就没办法互相兼容.这个时候当我们希望使用一个库的List类,而使用另外一个的Tree类,就会非常麻烦.这类冲突被称为名称空间(namespace)问题. 1.1传统C++名

  • C++中名称空间namespace的使用方法示例

    命名空间 在C++中,名称(name)可以是符号常量.变量.宏.函数.结构.枚举.类和对象等等.为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域. MFC中并没有使用命名空间,但是在.NET框架.MC++和C++/CLI中,都大量使用了命名空间. 我们常常会见到这样的语句: using namespace std; 或者还有这样的: usin

  • C++内存模型和名称空间详解

    目录 1. 单独编译 2.存储持续性.作用域和链接性 2.1 作用域和链接 2.2 自动存储持续性 2.3 静态持续变量 2.4 静态持续性.外部链接性 2.5 静态持续性.内部链接性 2.6 静态存储持续性.无链接性 2.7 说明符和限定符 2.8 函数和链接性 2.9 语言链接性 2.10 存储方案和动态分配 3. 名称空间 3.1 传统的C++名称空间 3.2 新的名称空间特性 3.3 名称空间及其前途 4 .总结 本章内容包括: 单独编译 存储持续性.作用域和链接性 定位new运算符 名

  • C++名称空间特性

    目录 一.名称空间特性 1.嵌套 2.传递 3.别名 4.匿名名称空间 文章转自微信公众号:Coder梁(ID:Coder_LT) 一.名称空间特性 1.嵌套 我们可以将名称空间声明进行嵌套: namespace elements {     namespace fire {         int flame;         ...     }     float water; } 我们观察一下可以发现这里的flame位于elements::fire当中,所以当我们使用解析运算符使用它的时候

  • 一篇文章搞懂Python的类与对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 函数内部可嵌套函数,嵌套函数有更内一层的名称空间 类代码块,名称空间为类自身 类中可定义函数,类中的函数有自己的名称空间,在类的内层 类的实例对象有自己的名称空间,和类的名称空间独立 类可继承父类,可以链接至父类名称空间 正是这一层层隔离又连接的名称空间将变量.类.对象.函数等等都组织起来,使得它

  • Spring根据XML配置文件 p名称空间注入属性的实例

    要生成对象并通过名称空间注入属性的类 代码如下: package com.swift; public class User { private String userName; public void setUserName(String userName) { this.userName = userName; } public String fun() { return "User's fun is ready."+this.userName; } } XML配置文件写法如下: &

  • 实例详解python函数的对象、函数嵌套、名称空间和作用域

    函数的对象 python中一切皆对象 函数对象的四大功能 引用 def f1(): print('from f1') f1() #调用函数 print(f1) print('*'*50) f = f1 # 将函数名f1赋值给f f() # f也可以调用函数 print(f) from f1 <function f1 at 0x000001FB05534620> ************************************************** from f1 <func

  • python 名称空间与作用域详情

    目录 一.名称空间 1.1 内置名称空间 1.2 全局名称空间 1.3 局部名称空间 1.4 加载顺序 1.5 查找顺序 二.作用域 2.1 全局作用域 2.2 局部作用域 2.4 函数对象+作用域应用 三.补充知识点 3.1 global关键字 3.2 nonlocal关键字 3.3 注意点 函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况. 一.名称空间 名称空间(name spaces):在内存管理那一章节时,我们曾说到变量的创建其实就是

  • python函数参数,名称空间,以及函数嵌套

    目录 一. 函数参数–动态传参 1.1动态位置接受参数,在参数位置编写*表⽰示接收任意内容 1.2 动态接收关键字参数 1.3无敌传参 * args, * * kwargs 一起使用 1.4 动态参数的另⼀一种传参⽅方式: 二. 命名空间 三. 函数的嵌套 四. 关键字global和nonlocal 一. 函数参数–动态传参 1.1动态位置接受参数,在参数位置编写*表⽰示接收任意内容 注意: 动态参数与位置参数的关系 默认参数和动态参数的关系 小结: 顺序: 位置参数, 动态参数*, 默认值参数

随机推荐