C++之命名空间

为什么要使用命名空间?

一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。
为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。

命名空间将全局作用域分成不同的部分不同命名空间中的标识符可以同名而不会发生冲突命名空间可以相互嵌套全局作用域也叫默认命名空间

对于不带.h的头文件,所有的符号都位于命名空间 std 中,使用时需要声明命名空间 std;对于带.h的头文件,没有使用任何命名空间,所有符号都位于全局作用域。这也是 C++ 标准所规定的。
将 std 直接声明在所有函数外部,这样虽然使用方便,但在中大型项目开发中是不被推荐的,这样做增加了命名冲突的风险,我推荐在函数内部声明 std。

命名空间的使用实例:

#include <iostream>// namespace是一个关键字,用来定义命名空间
namespace NameA
{int a;void swap (int* a, int* b){int temp = *a;*a = *b;*b = temp;}namespace NameAA{};struct A{};
};int a;int main2_3()
{// 对命名空间中单个元素使用using NameA::swap;int b = 20;int c = 30;swap (&b, &c);a = 40;return 0;
}void func()
{}// 2、使用 using 关键字
int main2_2()
{// 表明使用命名空间NameA中的内容// 但凡在这个声明之后使用的变量或者函数,只要没有指明具体的命名空间// 都使用Name A中的内容// using 有效范围时当前的大括号{ }using namespace NameA;NameA::a = 100;// ::前不加名字,代表使用默认的命名空间::a = 20;func();printf ("a = %d, %d\n", NameA::a, ::a);int b = 10;int c = 20;// swap 没有指明命名空间// 但是之前有了usingspace NameA; 而NameA中有swapswap (&b, &c);return 0;
}// 命名空间的使用,1、域解析符::
int main2_1()
{a = 10;         // 全局的aNameA::a = 20;  // 使用命名空间Name A中的变量int b = 1;int c = 2;NameA::swap (&b, &c);printf ("b = %d, c = %d\n", b, c);return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何做到每天写代码?

摘要&#xff1a;总有一大堆事情没有做完&#xff0c;没有时间和精力为业余项目写代码&#xff1f;不要着急&#xff0c;看看可汗学院计算机科学院院长John Resig怎么说。本文将教你如何保证在每天都能有时间给业余项目写代码。 你是否曾为业余项目没有进展而惆怅过&#xff1f…

Vue 实现前后端分离项目

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Vue实现前后端分离项目的初体验 经过之前学习的Vue的知识&#xff1a; vue基本指令vue组件vue-resourcevue路由 其实我们已经可以开始…

C++对C的一些加强和变化

实用性加强&#xff1a; int main() {// C语言中的变量都必须在作用域开始的位置定义&#xff01;&#xff01;// C中更强调语言的“实用性”&#xff0c;所有的变量都可以在需要使用时再定义。for (int i 0; i < 10; i){std::cout << i << std::endl;}return…

优秀Unix管理员的七个习惯

摘要&#xff1a;Unix系统管理员可能会很懒或喜欢优雅的解决方法&#xff0c;这就是他们的存在之美。一位优秀的Unix系统管理员有着自己的习惯&#xff1a;不会等到问题来找你、精通所使用的工具和系统、确定事情优先次序和喜欢优雅的解决方案但不迷失等。 优秀的Unix系统管理员…

Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 写法&#xff1a; <template><div id"app"><!-- 三目运算符使用 ‘ok’ 的值定义在 data 中-->{{ ok …

【快写】基本思路及模板

快读也可以了解一下 先从C自带的输出开始吧 cout<<n<<endl;这是最基本的输出&#xff0c;适合初学者 &#xff08;虽然我到现在都还在用&#xff09; 然后稍微快一点的输出 printf("%d",n);这个就比较快速了&#xff0c;但是对于那种毒瘤题目 故意卡你的…

C++与C中const的比较以及const和define的比较

C与C中const的比较&#xff1a; C语言中 const修饰的变量是一个 常变量&#xff0c;本质还是变量&#xff0c;有自己的地址空间C编译器对const常量的处理 当碰见常量声明时&#xff0c;在符号表中放入常量 > 问题&#xff1a;那又如何解释取地址编译过程中若发现对const使…

中国古典十大悲剧

一.《窦娥冤》  《窦娥冤》——元关汉卿 山阴书生窦天章因无力偿还蔡婆的高利贷&#xff0c;把七岁的女儿窦娥送给蔡婆当童养媳来抵债。窦娥长大后与蔡婆儿子成婚&#xff0c;婚后两年蔡子病死。后来蔡婆向赛卢医索债&#xff0c;被赛卢医骗至郊外谋害&#xff0c;为流氓张驴…

解决: Elements in iteration expect to have ‘v-bind:key‘ directives

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错&#xff1a; Elements in iteration expect to have v-bind:key directives 原本写法&#xff1a; <li v-for"site in s…

回来太多事需要处理

出差回来&#xff0c;发现太多事需要处理现在每个项目都在Delay。且没有一个人是主动汇报项目的。这是非常不正常的现象。感觉有点累转载于:https://www.cnblogs.com/boriscao/archive/2005/09/03/229368.html

不该失去的,一块钱也不放弃

很多人都觉得&#xff0c;有钱人既然财力雄厚&#xff0c;花钱时必定毫不手软。然而&#xff0c;观察成功的CEO&#xff0c;你会发现&#xff0c;他们多数人花钱也花得小心&#xff0c;对于什么该花、值得花&#xff0c;算得十分精细。 华人首富、香港长江实业与和记黄埔董事局…

C++之引用

普通引用和常引用 1. 变量名的回顾 变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间 问题&#xff1a;一段连续的内存空间是否只能有一个别名吗&#xff1f; 2. C引用的概念 引…

Vue.js 极简小例:数值计算、千米换算为米、九九乘法表、循环

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template><div id"app"><!-- 千米和米换算 --><div id "computed_props&quo…

shiro框架的学习

权限控制是shiro最核心的东西 Shiro权限声明通常是使用以冒号分隔的表达式。一个权限表达式可以清晰的指定资源类型&#xff0c;允许的操作&#xff0c;可访问的数据。同时&#xff0c;Shiro权限表达式支持简单的通配符&#xff0c;可以更加灵活的进行权限设置。 下面以实例来说…

C++之内联函数

内联函数是一种特殊的函数&#xff0c;具有普通函数的特征&#xff08;参数检查&#xff0c;返回类型等&#xff09; 内联函数是对编译器的一种请求&#xff0c;因此编译器可能拒绝这种请求 内联函数由 编译器处理&#xff0c;直接将编译后的函数体插入调用的地方 宏代码片段…

妈妈培养天才的13绝招

作父母的&#xff0c;都希望自己的宝宝可以变得聪明、懂事&#xff0c;所以想尽办法去让宝宝上早教班、做早期智力开发……当然&#xff0c;这些做法对于开发宝宝智力能够起到一定的帮助。但是&#xff0c;千万别忽视您所能给予宝宝的家庭教育。    近日&#xff0c;日本一位…

Vue.js 极简小例: 4 种方式样式绑定、style 的多种方式实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template><div id"app"><!-- JSON方式使用样式 --><div v-bind:style"{ colo…

C++之默认参数

一、什么是默认参数 C中可以在函数声明时为参数提供一个默认值&#xff0c; 当函数调用时没有指定这个参数的值&#xff0c;编译器会自动用默认值代替 二、默认参数规则 只有参数列表后面部分的参数才可以提供默认参数值 一旦在一个函数调用中开始使用默认参数值&#xff…

50 Python - 装饰器 类定义装饰器

04 类定义装饰器 上节通过函数定义装饰器&#xff0c;本节通过类定义装饰器 001 定义类装饰器 定义一个类&#xff0c;类里面两个函数&#xff0c;一个构造函数init()&#xff0c;一个调用函数call() 构造函数init时候&#xff0c;传递一个函数func()进来 调用函数call()&#…

C++之过载函数

过载函数的定义&#xff1a; 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 过载函数的判断标准&#xff1a; 函数重载至少满足下面的一个条件&#xff1a; 参数个数不同 参数类型不同 参数顺序不同 函数返回值不是函数重载的判断标准 调用…