C++之名称空间 namespacce
C++之名称空间 namespacce
namespace name{ double pail; void fetch(); struct Well{…}; }
名称空间可以是全局的,也可以位于另一个名称空间中,但不能在代码块中。
默认情况下,名称空间中声明的名称链接性是外部的。全局名称空间global namespace,它对应于文件级声明区域。
名称空间是开放的,可以将已有的名称加入名称空间中。
namespace name{ char * goose(const char *); }
将goose添加到name名称列表中。
访问名称空间中的名称。name::pail;
3.1 using 声明和using 编译指令
using声明使特定的标识符可用,using编译指令使整个名称空间可用。
using Jill :: fetch; // 使用using 声明
在函数外部使用using Jill :: fetch; 将把fetch添加到全局的名称空间中。
using声明使得一个名称可用,using编译指令使得所有的名称都可用。
using namespace name; 使得name中的所有名称可用。
在函数中使用using编译指令,将使其中的名称在该函数中可用。
int func(){ using namespace name; return 0; }
使用using声明时,就好像声明了相应的名称一样。如果某个名称已经在函数中声明了,则不能使用using声明导入相同的名称。
注:假设名称空间和声明区域定义了相同的名称。如果使用using声明将名称空间的名称导入该声明区域,则这两个名称会发生冲突,从而出错。如果使用using编译指令将该名称空间的名称导入该声明区域,则局部版本将隐藏名称空间版本。
一般来说,使用using声明比using编译指令更安全。
using namespace std; //将名称空间std中的所有内容导出到全局名称空间中。 或者 std::cout << “Hello” << endl; 或者 using std::cin; int x; cin>> x;
名称空间的其他特性:
名称空间声明进行嵌套。
namespace elements{ namespace fire{ int flame; … } }
访问flame, usinig namespace elements::fire;
也可以在名称空间中使用using编译指令和using声明
namespace myth{ using Jill::fetch; using namespace elements; }
假设要访问fetch,则需要这样 myth::fetch;
名称空间可以取别名: 如
namespace MEF = myth::elements::fires; using MEF::flame;
匿名的名称空间: 提供了链接性为内部的静态变量的替代品。
namespace { int ice; Int bandycoot; }
就相当于下面代码
static int ice;
static int bandycool;
示例程序:
(在头文件中声明命名空间,在cpp文件中定义命名空间)
运行结果:
Goatsniff ,Benny: $120 Glister ,Doodles Enter first name: zhang Enter last name: san Enter debt: 34 Enter first name: li Enter last name: si Enter debt: 56 Enter first name: wang Enter last name: wu Enter debt: 34 san ,zhang: $34 si ,li: $56 wu ,wang: $34 Total debt: $124 Rightshift ,Milo
名称空间及其用途:
- 如果开发了一个函数库或类库,将其放在一个名称空间中
- 导入名称时,首选使用作用域解析运算符或using声明的方法
- 对于using声明,首选将其作用域设置为局部而不是全局
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?