当前位置: 首页 > news >正文

重庆建设网站首页设计师应该知道的网站

重庆建设网站首页,设计师应该知道的网站,深圳建筑信息平台,wordpress主题ent破解版一、何为命名空间#xff1f; 首先我们运行下面代码#xff0c; #include stdio.h int rand 0; int main() {printf(%d, rand);return 0; } 我们会发现该代码能够正常运行#xff0c;没有任何问题。 但是当我们再在上面代码的基础上包含stdlib.h头…一、何为命名空间 首先我们运行下面代码 #include stdio.h int rand 0; int main() {printf(%d, rand);return 0; } 我们会发现该代码能够正常运行没有任何问题。 但是当我们再在上面代码的基础上包含stdlib.h头文件代码还能正常运行吗 #include stdio.h #include stdlib.h int rand 0; int main() {printf(%d, rand);return 0; } 这时我们会发现代码报错——“rand”重定义。这是因为在stdlib.h头文件中已经定义了rand()函数与全局变量rand发生了命名冲突问题从而导致printf()函数无法确定是输出rand全局变量的值还是输出rand()函数的地址。 在日常写代码的过程中我们自己定义的变量、函数很有可能跟C库发生命名冲突问题。并且进入公司项目组以后做的项目通常比较大多人协作也很有可能造成命名冲突问题。 但是C语言没有办法很好地解决这个问题若非要有办法的话也就只能是给重名的定义更换其他名字。 但这样做会导致工作效率十分低下为了更高效地解决此问题C提出了一个新语法——命名空间。 在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。 二、命名空间定义 定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员。 如下面代码 #include stdio.h #include stdlib.hnamespace zjd // zjd为命名空间的的名称 {int rand 0; }int main() { // rand先到局部范围内找若没有再到全局范围内找若还没有则程序会报错不会到定义的域里面去找printf(%d\n, rand); // rand访问的是全局变量rand()函数// rand指定到定义的zjd域里面去找printf(%d\n, zjd::rand); // ::域作用限定符return 0; } 该代码定义了一个名为zjd的命名空间域与全局作用域进行了隔离不会发生命名冲突问题。 Note ①命名空间定义和结构体定义写法类似但又不同结构体定义了一个新的数据类型命名空间定义了一个新的域。 ②域作用限定符:: 当域作用限定符::前面指定域名时会到指定的域中寻找变量、函数和类。 当域作用限定符::前面为空白时会到全局域中寻找变量、函数和类。 当没有域作用限定符::前面指定域名时会依次到局部域、全局域中寻找变量、函数和类。若局部域和全局域都没有找到程序会报错。 int a 0; int main() {int a 1;printf(%d\n, a); // 输出局部变量a —— 1printf(%d\n, ::a); // 输出全局变量a —— 0return 0; } ③一个命名空间就定义了一个新的作用域命名空间中的所有内容都局限于该命名空间中。 1、普通的命名空间 命名空间中的内容既可以定义变量也可以定义函数还可以定义类型。 namespace N1 {int rand; // 变量int Add(int left, int right) // 函数{return left right;}struct Node // 类型{struct Node* next;int val;}; }int main() {N1::a 10;printf(%d\n, N1::a);int sum N1::Add(1, 2);printf(%d\n, sum);struct N1::Node node;return 0; } 2、命名空间可以嵌套 命名空间内部还可以嵌套定义命名空间。 namespace N2 {int a;int b;int Add(int left, int right){return left right;}namespace N3{int c;int d;int Sub(int left, int right){return left - right;}} }int main() {int sum N2::Add(1, 2);printf(%d\n, sum);int dif N2::N3::Sub(2, 1);printf(%d\n, dif);return 0; } 3、多个命名空间名称相同 同一个工程中允许存在多个相同名称的命名空间编译器最后会合成同一个命名空间中。 比如一个工程中的test.h和test.cpp中两个同名的命名空间会被合并成一个。 // Test.h namespace N4 {typedef struct ListNode{struct ListNode* next;int val;}ListNode, * LinkList;void ListInit(LinkList ps); // 声明void ListPushBack(LinkList ps, int x); // 声明 }// Test.cpp #includeTest.h namespace N4 {void ListInit(LinkList ps) // 定义{// 实现不展开写了}void ListPushBack(LinkList ps, int x) // 定义{// 实现不展开写了} }int main() {struct N4::ListNode node;N4::ListInit(node);N4::ListPushBack(node, 3);return 0; } 三、命名空间使用 命名空间中成员该如何使用呢比如下面代码是正确的代码吗 namespace N {int a 10;int b 20;int Add(int left, int right){return left right;}int Sub(int left, int right){return left - right;} } int main() {printf(%d\n, a); // 该语句编译出错无法识别areturn 0; } 由于局部域和全局域都没有a并且未通过域作用限定符指定a的域无法识别a所以上面代码无法正常运行。 命名空间的使用有三种方式 加命名空间名称及作用域限定符使用using将命名空间中成员引入使用using namespace 命名空间名称引入 1、加命名空间名称及作用域限定符 在命名空间定义的讲解中大家实际上已经掌握该方式的使用了。 namespace N {int a 10;int b 20;int Add(int left, int right){return left right;}int Sub(int left, int right){return left - right;} }int main() {printf(%d\n, N::a);return 0; } Note该方式能够做到最好的命名隔离但是使用不方便每次都需要指定域。 2、使用using将命名空间中成员引入 通过该方式我们可以将命名空间的某个成员展开被展开的成员无需再通过域作用限定符指定域但是未被展开的成员仍需要通过域作用限定符指定域。 namespace N {int a 10;int b 20;int Add(int left, int right){return left right;}int Sub(int left, int right){return left - right;} }using N::b;int main() {printf(%d\n, N::a);printf(%d\n, b);return 0; } Note该方式可以用于展开常用的成员也有较好的隔离效果。 3、使用using namespace 命名空间名称引入 通过该方式我们可以将整个命名空间展开使用该命名空间里的变量、函数等无需再通过域作用限定符指定域了。 namespace N {int a 10;int b 20;int Add(int left, int right){return left right;}int Sub(int left, int right){return left - right;} }using namespace N;int main() {printf(%d\n, a);printf(%d\n, b);Add(10, 20);return 0; } Note命名空间全部展开用起来虽然极其方便但是隔离彻底失效了。这种方式建议大家慎用。
http://www.hkea.cn/news/14285676/

相关文章:

  • 站长工具域名查询ip志愿者网站建设
  • 仙桃做网站的个人做外贸常用那几个网站
  • 张家港做网站收费标准seo排名赚能赚钱吗
  • 酒泉建设局造价官网站公司宣传片如何制作
  • 宜昌怎样优化网站建设免费wordpress资源
  • 如何上传文件到自己的网站网站更新文章首页不显示
  • 智能家居型网站开发广州市番禺区住房和建设局网站
  • 西安做网站首选白山镇seo快速排名
  • 上海企业网站建设报手机设置管理网站首页
  • 百度不收录哪些网站吗平台搭建与拆除流程
  • 广州网站建设+美词现在有专业做海鲜的网站没有
  • 淘客导购网站怎么做网站域名301设置
  • 网络公司网站源码写作网站有哪些
  • 电子商务网站系统建设实训心得小程序营销策划方案
  • 网站上传的图片怎么做的清晰东莞市建设
  • 网站建设与管理岗位国内做网站公司排名
  • 安徽省建设厅网站官网信息发布网站开发模板
  • 正在建设中的网站可算违规表白网页制作免费网站
  • 红色大气网站互联网网站制作公司哪家好
  • 宣讲家网站两学一做心得wordpress下雪
  • 统计局网站建设情况免费咨询男性问题
  • 给女朋友做网站的素材百度信息流
  • 作作网站北京兼职做网站建设
  • 企业网站建设专业服务wordpress 颜色插件下载
  • 自己做网站好还是让别人做1688品牌加盟网
  • 在哪个网站做流动补胎的广告好短网址压缩
  • 微信公众号里怎么做网站网络营销郑州网站搭建方案
  • 二级菜单网站如何做伪静态怎样查公司注册信息查询
  • 河南seo网站开发小程序开发哪家好
  • 餐饮加盟网站模板视频素材网站大全免费