名称空间

名称空间的种类:
1. 由用户定义的有名字的名称空间,作用是提供一个声明名称的区域。
在名称空间中声明的名称的链接性为外部的。
名称空间是开放的,即可以把名称加入到已有的名称空间中。
2. 全局名称空间,对应于文件级声明区域。全局变量位于全局名称空间中。
3. 未命名的名称空间。无法显式地使用using编译指令或using声明将未命名空间中的名称加入到其它命名空间中。这就提供了链接性为内部的静态变量的替代品。

名称空间的用法:
1. using声明和using编译指令
using声明将特定的标识符加入到它所属的声明区域中。在全局声明区域中
使用using声明时,会把名称添加到全局名称空间中。在代码块中使用using声明时,会把名称添加到局部名称空间中。
using编译指令使整个名称空间可用。在全局声明区域中使用using编译指令,将使该名称空间中的名称在全局空间中可用。在代码块区域中使用using编译指令,将使该名称空间中的名称在代码块区域中可用。
2. using声明和using编译指令的不同之处
假设名称空间和声明区域定义了相同的名称。如果试图使用using声明将名称空间中的名称该声明区域,则这两个名称会发生冲突,从而出错。如果使用using编译指令将该名称空间中的名称导入该声明区域,则局部版本将隐藏名称空间版本。
请看示例代码:
[email protected]:~/project/test/namespace$ cat namespace-1.cpp
#include<cstdio>

namespace Jill{
  char fetch = ‘a‘;
}
char fetch = ‘b‘;

int main(){
  using namespace Jill;
  char fetch = ‘c‘; // hides Jill::fetch

printf("fetch:(%p, %c)\n", &fetch, fetch);
  printf("Jill::fetch:(%p, %c)\n", &Jill::fetch, Jill::fetch);
  printf("::fetch:(%p, %c)\n", &::fetch, ::fetch);
}

[email protected]:~/project/test/namespace$ cat namespace-2.cpp
#include<cstdio>

namespace Jill{
  char fetch = ‘a‘;
}
char fetch = ‘b‘;

int main(){
  using Jill::fetch; // error: redeclaration of char fetch.
  char fetch = ‘c‘;

printf("fetch:(%p, %c)\n", &fetch, fetch);
  printf("Jill::fetch:(%p, %c)\n", &Jill::fetch, Jill::fetch);
  printf("::fetch:(%p, %c)\n", &::fetch, ::fetch);
}

再解释一下如下几行常见的代码
#include<iostream>
using namespace std;
#include语句将头文件iostream加入到名称空间std中。然后,using编译指令将名称空间std中的所有内容导出到全局名称空间中。
如果系统不支持名称空间,可以将这两行代码替换为:
#include<iostream.h>
旧的头文件iostream.h没有使用名称空间,但新的头文件iostream使用了名称空间。

3. 名称空间的其它特性
可以嵌套;
可以在名称空间中使用using编译指令和using声明;
using编译指令是可以传递的。

时间: 2025-01-14 21:50:17

名称空间的相关文章

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

python学习笔记第五节(函数,名称空间,作用域)

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变量名实参就是值 打破顺序限制 经常变化的值用位置形参,值通常不变的用默认参数.默认参数通常定义成不可变类型.默认参数只在定义时被赋值一次. 可变长参数就是* 关键字参数(关键字参数指的是实参当中指定y=2,z=3等等) *等同于位置参数 函数内

python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): return x**2 y=func(10) print(y) def foo(): return None res=foo() print(res) def foo(): return{'a':1} res=foo() print(res['a']) def foo(): return {'a':1},1,'a',[1,2] res=foo() p

C++学习笔记--名称空间

名称空间是为了更好的控制名称的作用域,以管理不同的类库,避免发生冲突. 1.创建名称空间 如下,使用namespace关键字创建了pers和debts两个名称空间. #ifndef NAMESP_H_ #define NAMESP_H_ namespace pers { const int LEN = 40; struct Person { char fname[LEN]; char lname[LEN]; }; void GetPerson(Person &); void ShowPerson

11、函数对象、函数的嵌套、名称空间与作用域

一.函数对象 函数对象,函数是第一类对象,即函数可以当做数据传递 具体特点: 1.可以被引用: 1 def foo(): 2 print('from foo') 3 4 func=foo 5 6 print(foo) 7 print(func) 8 func() 2.可以当作参数传递 1 def foo(): 2 print('from foo') 3 4 def bar(func): 5 print(func) 6 func() 7 8 bar(foo) 3.返回值可以是函数 1 def fo

唯一名称和名称空间

1.oracle数据库中有多个名称空间, 分布:USER,ROLE,PUBLIC SYNONYM位于共同的名称空间 table,view,sequence,private synonym和用户自定义的type对象在同一个空间 索引有自己的名称空间,constraint有自己的命名空间 也就是表名和索引,约束可以同名但不能和view,sequence同名

名称空间、作用域、闭包、装饰器、迭代器、生成器

--名称空间与作用域名称空间:是存放名字的地方准确的说名称空间是存放名字与变量值绑定关系的地方内置名称空间:在python解释器启动时产生,存放一些python内置的名字全局名称空间: 在执行文件时产生,存放文件级别定义的名字局部名称空间:在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间,用来存放该函数内定义的名字,该名字在函数调用时生效,在函数调用结束后失效加载顺序:内置-->全局-->局部名字的查找顺序 局部-->全局-->内置max=1def foo(): m

Python 名称空间与作用域

名称空间:存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的地方 一.名称空间又分为: 内置名称空间:在python解释器启动时产生,存放一些python内置的名字 全局名称空间:在执行文件时产生,存放文件级别定义的名字 局部名称空间:在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间 用来存放该函数内定义的名字,该名字在函数调用时生效,在函数调用结束后失效 二.加载顺序 加载顺序:内置--->全局--->局部 x=1 def func():#全局 y=2 def f1

函数参数、函数嵌套、作用域、名称空间

一.函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 1.位置参数 我们先写一个计算x2的函数: def power(x): return x *