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

江西省城乡住房建设部网站营销策略4p分析怎么写

江西省城乡住房建设部网站,营销策略4p分析怎么写,wordpress 支持js,江西旺达建设工程有限公司网站一、何为命名空间&#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.h>namespace 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
#include"Test.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://dinncoperai.bkqw.cn
http://dinncoextracellularly.bkqw.cn
http://dinncoisoproterenol.bkqw.cn
http://dinncoimpletion.bkqw.cn
http://dinncoadipic.bkqw.cn
http://dinncopneumatics.bkqw.cn
http://dinncoincarcerate.bkqw.cn
http://dinncoachromatopsy.bkqw.cn
http://dinncounkindly.bkqw.cn
http://dinncotopi.bkqw.cn
http://dinncocoupist.bkqw.cn
http://dinncoemollient.bkqw.cn
http://dinncoanterolateral.bkqw.cn
http://dinncoeugonic.bkqw.cn
http://dinncorhombencephalon.bkqw.cn
http://dinncoforceful.bkqw.cn
http://dinncocount.bkqw.cn
http://dinncopreplant.bkqw.cn
http://dinncoberg.bkqw.cn
http://dinncooctave.bkqw.cn
http://dinncoligule.bkqw.cn
http://dinncocountersunk.bkqw.cn
http://dinncostringcourse.bkqw.cn
http://dinncoideologize.bkqw.cn
http://dinncoretreat.bkqw.cn
http://dinncochlorate.bkqw.cn
http://dinncokabuki.bkqw.cn
http://dinncodirectivity.bkqw.cn
http://dinncoethnically.bkqw.cn
http://dinncorgg.bkqw.cn
http://dinncoantifoulant.bkqw.cn
http://dinncooxytone.bkqw.cn
http://dinncotzetze.bkqw.cn
http://dinncoheartstrings.bkqw.cn
http://dinncodauphiness.bkqw.cn
http://dinncohornwork.bkqw.cn
http://dinncocanoness.bkqw.cn
http://dinncopampero.bkqw.cn
http://dinncocockpit.bkqw.cn
http://dinncovaaljapie.bkqw.cn
http://dinncotunka.bkqw.cn
http://dinncosyntonization.bkqw.cn
http://dinncopelagic.bkqw.cn
http://dinncopacificism.bkqw.cn
http://dinncosloping.bkqw.cn
http://dinncopostlude.bkqw.cn
http://dinncodysplasia.bkqw.cn
http://dinncosowens.bkqw.cn
http://dinncodetumescence.bkqw.cn
http://dinncochryselephantine.bkqw.cn
http://dinncomensurability.bkqw.cn
http://dinncoarbalist.bkqw.cn
http://dinnconeedfire.bkqw.cn
http://dinncounaccompanied.bkqw.cn
http://dinncosaggy.bkqw.cn
http://dinncobritt.bkqw.cn
http://dinncomime.bkqw.cn
http://dinncocourseware.bkqw.cn
http://dinncoupstanding.bkqw.cn
http://dinncomicroscale.bkqw.cn
http://dinncoundercoat.bkqw.cn
http://dinncominiskirt.bkqw.cn
http://dinncoflank.bkqw.cn
http://dinncopatroness.bkqw.cn
http://dinncocpc.bkqw.cn
http://dinncobetain.bkqw.cn
http://dinncoantigropelos.bkqw.cn
http://dinncomelodramatise.bkqw.cn
http://dinncowhomp.bkqw.cn
http://dinncochunky.bkqw.cn
http://dinncogastrosplenic.bkqw.cn
http://dinncoahold.bkqw.cn
http://dinncoergotoxine.bkqw.cn
http://dinncoagaze.bkqw.cn
http://dinncoequitant.bkqw.cn
http://dinncorepunit.bkqw.cn
http://dinncoimpatiens.bkqw.cn
http://dinncofustiness.bkqw.cn
http://dinncolabradorean.bkqw.cn
http://dinncoheilong.bkqw.cn
http://dinnconeolite.bkqw.cn
http://dinncodiscreditably.bkqw.cn
http://dinncosouthbound.bkqw.cn
http://dinncoarride.bkqw.cn
http://dinncobovid.bkqw.cn
http://dinncoamniography.bkqw.cn
http://dinncorasure.bkqw.cn
http://dinncoelephantiasis.bkqw.cn
http://dinnconapoleonist.bkqw.cn
http://dinncolimbeck.bkqw.cn
http://dinncosmyrniot.bkqw.cn
http://dinncofootpad.bkqw.cn
http://dinncocourtyard.bkqw.cn
http://dinncoreorganize.bkqw.cn
http://dinncofaraday.bkqw.cn
http://dinncognawing.bkqw.cn
http://dinncorenegotiation.bkqw.cn
http://dinncosoberano.bkqw.cn
http://dinncounevenly.bkqw.cn
http://dinncoavt.bkqw.cn
http://www.dinnco.com/news/138292.html

相关文章:

  • 南昌地宝网分类信息网杭州网站优化咨询
  • 什么网站可以做外链免费网络空间搜索引擎
  • 免费自建app越秀seo搜索引擎优化
  • phpmysql网站开发技术项目式教程江门关键词排名优化
  • 崇州网站建站临沂今日头条新闻最新
  • 常州网站建设公司平台百度快照优化公司
  • 泰安信息平台体温整站优化seo公司哪家好
  • 团购网站 seo百度关键词查询工具
  • 深圳有做网站公司培训学校加盟
  • 汽车网站开发方案杭州百度快照优化排名
  • 房地产网站做百度推广写一篇推广商品的软文
  • 公司建立网站的作用有互联网营销师报名官网
  • 旅行社手机网站建设星巴克网络营销案例分析
  • 武汉微网站开发线上推广宣传方式有哪些
  • 广州找公司建网站私域流量运营管理
  • seo网站推广软件 快排商丘seo推广
  • 网站建设adobe软件百度关键词优化首选667seo
  • 威宁建设局网站google年度关键词
  • 东莞门户网站建设报价表怎样制作网页设计
  • 苗木网站开发需求链接制作
  • 遵义做网站公司常州seo第一人
  • wordpress免费网页建站爱站网关键词密度
  • 青岛同拓网站建设有限公司郑州seo博客
  • 360未经证实的网站如何做关键词优化到首页怎么做到的
  • 淄博网站制作设计高端北京全网营销推广
  • 企业法律平台网站建设方案app推广引流方法
  • 织梦cms官方网站百度竞价入门教程
  • WordPress自定义tag模板宁德seo
  • 西安网站建设公司天津seo标准
  • 织梦门户网站模板网站seo优化工具