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

响应式网站模板滚动条百度最新推广产品

响应式网站模板滚动条,百度最新推广产品,字体设计软件,建网站难吗?文章目录 引言命名空间是什么?定义命名空间嵌套命名空间 namespace如何做到隔离命名的?使用命名空间1.using namespace 展开命名空间2.使用using引入命名空间中的某个成员3.命名空间名称作用域限定符 拓展总结 引言 通过00【C 入门基础】前言得知&#…

文章目录

  • 引言
  • 命名空间是什么?
    • 定义命名空间
      • 嵌套命名空间
  • namespace如何做到隔离命名的?
    • 使用命名空间
      • 1.using namespace 展开命名空间
      • 2.使用using引入命名空间中的某个成员
      • 3.命名空间名称+作用域限定符
  • 拓展
  • 总结


引言

通过00【C++ 入门基础】前言得知,C++是为了解决C语言在面对大型项目的局限而诞生:

C语言面对的现实工程问题(复杂性、可维护性、可扩展性、安全性)

C语言中,无论是相同文件还是不同的文件之间,都不可以出现重名的函数、变量,变量、函数和结构体的名称将都存在于全局作用域中,会出现命名冲突或名字污染等问题,
C++中的namespace关键字的出现就是针对这种问题的。

命名冲突问题:

#include<stdlib.h>
int rand = 0;
int main()
{return 0;
}

报错:“rand”: 重定义;以前的定义是“函数”
原因:我们自定义的rand和stdlib.h库中的rand函数命名冲突了,导致编译器分不清。

命名空间是什么?

命名空间顾名思义,是隔离命名区域的一个空间,在C语言中,没有命名空间的概念,那么只能在整个全局域随便命名,伴随的便是各种变量、函数、结构体的命名冲突,在C++中,通过命名空间,隔离出一个空间,不同空间的命名互不影响,这样就解决了命名重复的问题。
在这里插入图片描述

定义命名空间

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

namespace mySpace
{int rand = 0;
}
namespace yourSpace
{int rand(){return 6;}
}
int main()
{return 0;
}

嵌套命名空间

命名空间之间还可以嵌套,做到将我们一个命令空间的区域再划分小。

namespace mySpace
{int rand = 0;namespace yourSpace{int rand(){return 6;}}
}
int main()
{return 0;
}

如果同一个工程中允许存在多个相同名称的命名空间怎么办?
编译器最后会将它们合成同一个命名空间。那么如果我们的同名命名空间中,又有命名冲突怎么办?
很简单,用命名空间嵌套。

namespace如何做到隔离命名的?

其实我们namespace XXX{}的方式,指定的是一个命名空间域,域(Scope)​​ 是一个核心概念,它定义了程序中标识符(如变量、函数、类名)的可见性与生命周期范围。我们目前常见的域有:

1.局部域
​范围​:整个程序文件(跨文件通过 extern 共享)。
​问题​:所有符号直接暴露,​无隔离​(C 语言的局限)。
2.全局域
​范围​:函数、循环、条件语句内部的 {} 块。
​生命周期​:变量在退出作用域时自动销毁。

C++ 的命名空间(Namespace)本质是一种特殊的域,用于解决全局作用域下的命名冲突问题。

使用命名空间

命名空间中成员该如何使用呢?

命名空间的使用有三种方式:
1.using namespace 展开命名空间
2.使用using引入命名空间中的某个成员
3.命名空间名称+作用域限定符

namespace mySpace
{int a = 0;
}int main()
{int b = a;  //报错“a”: 未声明的标识符return 0;
}

命名空间就是用来解决全局作用域下的命名冲突,所以直接访问肯定不可行。

1.using namespace 展开命名空间

#include<stdio.h>
namespace mySpace
{int a = 0;
}using namespace mySpace;  //展开mySpace命名空间域,相当于将我们mySpace的域和全局域"接壤"//那么我们全局中就可以使用了.
int main()
{int b = a;return 0;
}

那么现在我们就大概可以知道,我们一般使用STL库(standard template library标准模板库)的时候,常写的“using namespace std;”是什么,“std”其实就是我们STL库的一个命名空间。

但是注意,直接将我们的空间展开,那么那么我们一个程序就可以存在同名的不同成员,但是这时候访问就会有二义性问题,因为编译器并不知道访问哪个,所以我们在开发大型项目的时候,还是建议我们使用的第2、3个方法。

#include<stdio.h>
namespace mySpace
{int a = 0;
}using namespace mySpace;int a = 2;
int main()
{printf("%d",a);  // 报错:“a”: 不明确的符号return 0;
}

2.使用using引入命名空间中的某个成员

#include<stdio.h>
namespace mySpace
{int a = 0;int b = 1;
}using mySpace::a;//指定引入变量a.int main()
{int c;c = a;       //a引入了可以正常使用.c = b;       //b未引入,所以报错:“b”: 未声明的标识符return 0;
}

我们using指定引入变量,就相当于在两个域中(全局域和命名空间域)中,开了一个特殊通道,允许我们的编译器可以单独找到这个变量。
当我们的程序中,使用到一个的函数、变量多次,那么我们就可以使用这种指定引入的方式:

#include<stdio.h>
#include<iostream>
using std::cout;
int main()
{cout << "a";cout << "a";cout << "a";cout << "a";cout << "a";cout << "a";cout << "a";return 0;
}

3.命名空间名称+作用域限定符

一般的编译器自动域搜索过程,是一个由内到外的过程,局部作用域=>再…外层的作用域=>全局作用域=>using namespace引入的命名空间域。
而我们的作用域限定符“: :”,是C++解决命名冲突的关键机制,可以让我们指定某个域访问变量:

#include<stdio.h>
namespace mySpace
{int a = 0;int b = 1;
}
int a = 1;
int main()
{int a = 2;printf("%d", a);           //由编译器自动根据作用域顺序找到printf("%d", ::a);         //不加命名空间名的就是指定全局域访问printf("%d", mySpace::a);  //指定访问mySpace中的变量return 0;
}

拓展

头文件include展开和命名空间域using展开完全不是同一个东西!!
域是域,库是库。

C++也可以用“.h”的头文件,但是为什么C++中的头文件没有.h?
在比较老的C++版本中,当时也没有命名空间,之后C++的更新中才有了命名空间,便把很多的东西全加入到C++库中(std命名空间中),C++标准库为了与C语言区分开来,并引入命名空间的概念,所以给后续的头文件都设计不带“.h”。
然后也把一些C语言的库,带“.h”的头文件,都重新命名,去掉“.h”,在最前面加上“c”(stdio.h头文件 => cstdio),注意,即便是现在,我们所有带“.h”的C语言头文件,也都是可以正常使用的,但是它也还是会污染命名空间,而改变之后的带“c”的头文件,内部已经全部被std命名空间封装了。

总结

1.命名空间解决的是全局变量的重名问题。
2.命名空间使用有三种方法(域作用限定符是关键)。
3.“c”式的C语言库,是经过命名空间std封装的库。


本文章为作者的笔记和心得记录,顺便进行知识分享,有任何错误请评论指点:)。

http://www.dtcms.com/wzjs/354934.html

相关文章:

  • 厦门 网站开发线上推广活动有哪些
  • 服饰网站模板大数据免费查询平台
  • 广告设计公司服务承诺seo排名优化
  • 郑州建设局网站cba目前排名
  • 做微电网的公司网站百度老旧版本大全
  • net网站同时支持 生成静态文件和伪静态头条广告入口
  • wordpress 本地化函数知名的搜索引擎优化
  • wordpress back end临沂seo网站管理
  • 网站搭建南京seo包年优化费用
  • 多网站怎么做seo免费检测网站seo
  • 做跨境网站惊艳的网站设计
  • 酒店网站建设方案结束语如何在百度上推广业务
  • 免费自己制作网站方法wordpress网站建设
  • 昌吉州建设局网站进入百度app查看
  • 手机网站制作教程html5+css3视频教程大全网络营销师主要做什么
  • 做网站维护有前途吗营销技巧培训
  • 镇江网站设计建设价格个人推广网站
  • 安吉网站建设以下属于网站seo的内容是
  • 熊撑号怎么做网站推广福州关键词快速排名
  • 网站开发平台及常用开发工具手机营销软件
  • 贵州网站开发流程搜索引擎搜索器
  • 怎么用大淘客做网站推广的公司
  • 网站建设 经济效益seo服务商
  • 服务器2003系统如何建设网站武威网站seo
  • 住房城乡建设部官方网站网站快速优化排名推荐
  • 人社部能力建设中心网站免费广告推广平台
  • 什么软件做网站好百度域名注册官网
  • 温州企业建站程序全球搜是什么公司
  • 2015手机版网站制作关键词搜索优化公司
  • java可以做网站后台吗免费引流人脉推广软件