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

路由器wordpress南宁优化网站收费

路由器wordpress,南宁优化网站收费,项目外包公司可以去吗,优秀网站界面设计文章目录 前言1. namespace 的价值2. namespace 的定义3. 命名空间的本质4. 嵌套的命名空间5. 命名空间的使用6. using 指令7. 补充结语 前言 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外&am…

在这里插入图片描述

文章目录

  • 前言
  • 1. namespace 的价值
  • 2. namespace 的定义
  • 3. 命名空间的本质
  • 4. 嵌套的命名空间
  • 5. 命名空间的使用
  • 6. using 指令
  • 7. 补充
  • 结语

前言

假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。

同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名

在这里插入图片描述

1. namespace 的价值

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

c语言项目类似下面程序这样的命名冲突是普遍存在的问题,C++引入了命名空间这个概念,就是专门用于解决这种问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{// 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”printf("%d\n", rand);return 0;
}

2. namespace 的定义

命名空间的定义使用关键字 namespace,后跟命名空间的名称,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。如下所示:

namespace namespace_name {// 代码声明
}

为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:

name::code;  // code 可以是变量或函数

这里面的::作用域限定符

让我们来看看命名空间如何为变量或函数等实体定义范围:

#include <iostream>
using namespace std;// 第一个命名空间
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二个命名空间
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
int main ()
{// 调用第一个命名空间中的函数first_space::func();// 调用第二个命名空间中的函数second_space::func(); return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Inside first_space
Inside second_space

3. 命名空间的本质

  • namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不在冲突了。
#include <stdio.h>
#include <stdlib.h>
// 1. 一般的命名空间定义
// xhh是命名空间的名字,一般开发中是用项目名字做命名空间名。
namespace xhh
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
int main()
{// 这⾥默认是访问的是全局的rand函数指针printf("%p\n", rand);// 这⾥指定xhh命名空间中的randprintf("%d\n", xhh::rand);return 0;
}

C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。

4. 嵌套的命名空间

namespace 只能定义在全局,当然还可以嵌套定义,示例如下。

//2. 命名空间可以嵌套
namespace bit
{namespace pig{int rand = 1;int Add(int left, int right){return left + right;}}namespace bird{int rand = 2;int Add(int left, int right){return (left + right) * 10;}}
}
int main()
{printf("%d\n", bit::pig::rand);printf("%d\n", bit::bird::rand);printf("%d\n", bit::pig::Add(1, 2));printf("%d\n", bit::bird::Add(1, 2));return 0;
}

5. 命名空间的使用

编译查找一个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找。所以下面程序会编译报错。

#include<stdio.h>
namespace N
{int a = 0;int b = 1;
}
int main()
{// 编译报错:error C2065: “a”: 未声明的标识符printf("%d\n", a);return 0;
}

所以声明了命名空间之后,如果在命名空间外部访问命名空间内部的成员,需要在成员名前面加上 命名空间::,示例如下。

// 指定命名空间访问
int main()
{printf("%d\n", N::a);return 0;
}

6. using 指令

有没有什么比较方便的方法能让我们直接通过成员名访问命名空间内的成员呢?答案是肯定的。我们可以使用 using 指令。

using 指令有如下两种形式:

  1. using 命名空间::成员名;

这条指令可以让我们省略某个成员名前的命名空间,直接通过成员名访问成员,相当于将这个成员导入了当前的作用域。

// using将命名空间中某个成员展开
using N::b;
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;
}
  1. using namespace 命名空间;

这条指令可以直接通过成员名访问命名空间中的任何成员,相当于将这个命名空间的所有成员导入了当前的作用域。

// 展开命名空间中全部成员
using namespce N;
int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}

因此,如果执行了 using namespace N;,就会将 N 中的所有名字都会引入到全局命名空间当中。

📌注意

  • 指定命名空间访问。项目中推荐这种方式。

  • using将命名空间中某个成员展开。项目中经常访问的不存在冲突的成员推荐这种方式。

  • 展开命名空间中全部成员,由于这种方式会将此命名空间中的所有名字引入,因此如果声明了与其中重名的变量或函数,就可能会因为命名冲突而导致编译错误。所以说项目中不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

7. 补充

  • 项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突。

  • C++标准库都放在一个叫std(standard)的命名空间中。

结语

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。

也可以点点关注,避免以后找不到我哦!

Crossoads主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的动力!

在这里插入图片描述

http://www.khdw.cn/news/20231.html

相关文章:

  • 网站首页的滚动大图怎么做百度推广开户免费
  • 在360做网站和百度做网站的区别百度权重优化软件
  • web前端做营销类企业网站网络营销的效果是什么
  • 西宁最好的建站公司郑州seo博客
  • 个人怎么做淘宝客网站站长权重
  • 用discuz做行业网站google搜索中文入口
  • WordPress图片直链插件网络营销推广seo
  • 网站建设学什么百度云登陆首页
  • 网站建设与维护总结优化大师手机版
  • 做室内设计的网站有哪些方面免费一键生成个人网站
  • 教育企业网站源码百度健康人工客服电话24小时
  • 网站 多线线上推广工作内容
  • wordpress区分移动站国内十大搜索引擎网站
  • wordpress轻量级主题百度seo可能消失
  • 做照片书网站百度西安分公司地址
  • 网站模板凡建站长沙h5网站建设
  • 微信小程 wordpress郑州seo外包顾问
  • 建立个人博客网站app推广方案模板
  • 上海网站建设 知名做最新新闻事件今天国内大事
  • 深圳优质网站建设案例关键词排名查询软件
  • wordpress 两栏 主题搜索引擎优化的具体措施
  • 网络视频会议系统杭州seo代理公司
  • 专业网站建设商城价格微信小程序免费制作平台
  • 陕西富通建设有限公司网站电子网址怎么创建
  • 福州网站建设出格网络百度投诉中心在线申诉
  • 网站类别选择百度指数查询官网入口
  • 网站建设需要哪些人员哪里能搜索引擎优化
  • 中山骏域网站建设2022年关键词排名
  • 网站名词排名怎么做直链平台
  • 哪个网站有教做面食锦州seo推广