当前位置:首页 » 《随便一记》 » 正文

C++修炼之练气期一层——命名空间

11 人参与  2023年04月01日 12:04  分类 : 《随便一记》  评论

点击全文阅读


目录

1.引例

2.命名空间的定义

3.命名空间的使用

4.命名空间使用注意事项


1.引例

#include <stdio.h>#include <stdlib.h>int rand = 10;int main(){    printf("%d\n", rand);    return 0;}

当我们用C语言写下这样的代码,看着并没有什么语法问题,但是当编译时,就会出现这样的报错:

经过查询后才发现,原来 rand 是一个库函数我们并不能使自己的变量名与之相同。

这可麻烦了,到了工作时,我们面对海量的代码,势必会有各种各样相同的变量名字或函数名造成命名冲突,我们总不能一个一个改过去吧,那么有什么办法可以解决这一问题呢?

答案是肯定的,这就是接下来要讲到的命名空间(namespace)。

2.命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员(类似于结构体的样子);

//该命名空间的名字为hxy(花想云)namespace hxy{    //定义自己的变量、函数等int rand = 10;void qsort(int* a, int n){//...}struct Node{int val;struct Node* next;//...};}

命名空间可以嵌套;

namespace hxy{int rand = 10;namespace hxy2{        int rand = 20;namespace hxy3{//....}}}

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

//test.cpp中定义namespace hxy{int rand = 10;void qsort(int* a, int n){//...}struct Node{int val;struct Node* next;//...};}//test.h中定义namespace hxy{int sum = 0;int add(int a, int b){//...}}//两个hxy会被合并成为一个

 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

3.命名空间的使用

命名空间的使用有 3 种方式:

加命名空间名称及作用域限定符(::);

namespace hxy{int rand = 10;void qsort(int* a, int n){//...}struct Node{int val;struct Node* next;//...};}int main(){printf("%d\n", hxy::rand);return 0;}

使用using将命名空间中某个成员引入;

using  hxy::rand;int main(){printf("%d\n",rand);return 0;}

使用using namespace 命名空间名称引入;

using  namespace hxy;int main(){printf("%d\n", rand);return 0;}

4.命名空间使用注意事项

我们可能经常见到这样的语句:

using namespace std;

它告诉编译器在当前代码块中使用标准命名空间(namespace)std中的标识符 。

标准命名空间std是C++标准库的命名空间,包含了很多常用的函数和对象,例如输入/输出操作(cout、cin)、字符串处理、数学运算等。

使用using namespace std可以使代码更简洁易读,但可能会导致命名冲突或歧义。

实际开发项目的过程中,我们一般使用

1.域作用限定符访问;

#include <iostream>int main(){    //cin、cout为C++中常用的输入输出语句    //end暂且可理解为作用与'\n'相同std::cout << "hello world" << std::endl;return 0;}

2.部分常用展开使用;

using std::cout;using std::endl;int main(){cout << "hello world" << endl;return 0;}

在日常的代码练习中,为了方便可使用

3.全局展开。

using namespace std;int main(){cout << "hello world" << endl;return 0;}


点击全文阅读


本文链接:http://zhangshiyu.com/post/57767.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1