【C++】入门之域的详解

六点半888 2024-09-02 13:05:02 阅读 74

【C++】入门之域的详解

域的分类域的定义和初步理解域的深入理解即认识命名空间域的嵌套命名空间域嵌套的作用(命名空间嵌套可以解决什么问题?)

域的分类

域主要分为4种:局部域,全局域,类域,命名空间域(展开命名空间域 或 指定访问命名空间域)

域的定义和初步理解

C++兼容C,所以直接上C语言例子便于理解):

<code>#include<stdio.h>

int a = 0;//全局变量

//命名空间域的实现

namespace wch//域的定义,wch为命名空间域的名字可任意取

{

int a = 1;

}

int main()

{

int a = 2;//局部变量

printf("%d\n", a);//局部优先原则,此处应访问局部

printf("%d\n", ::a);

//::该符号为范围解析运算符,如上操作即可访问全局变量a

printf("%d\n", wch::a);

//如上操作即可访问命名空间域变量a

return 0;

}

运行结果:

在这里插入图片描述

总结:命名空间域其实就是在全局域里面的一块独立空间,访问该空间里面的·内容时加上对应操作

那么看看如下代码截图便可更加理解透彻:

在这里插入图片描述

printf无法正常输出a,因为命名空间域被打开后全局域中就会有a变量被重复定义两次且被赋值,运行代码编译器就会报错

总结:命名空间域其实就是在全局里面的一块独立空间,一旦使用using namespace将其打开,里面全部内容就会变为全局域的内容,因此不要轻易将命名空间域展开

域的深入理解即认识

那么道友们现在肯定会有疑惑,为什么刚开始学习C++时都会这样写:

<code>#include<iostream>

using namespace std;//将std(标准库即一个C++自带的命名空间域)完全展开

int main()

{

cout << "hello world" << endl;

return 0;

}

当然也可以这样写:

#include<iostream>

//using namespace std;

int main()

{

std::cout << "hello world" << std::endl;

std::cout << "hello world" << std::endl;

std::cout << "hello world" << std::endl;

return 0;

}

个人分析:

std为C++的标准库,简单来说其实就是一个很大的命名空间域,这个域是C++自带的,里面会有许多内容,比如cout(输出流),cin(输入流)等等

当我们以后写大一点的项目时,难免会起一些名字和std里面的冲突,写完后由于项目大内容多是不方便修改的,所以写项目时不建议直接使用using namespace std;也不建议在每个cout,cin前面加std:: 这样会很繁琐,因此:

我们可以展开某个,把常用的展开,如:

我们会经常用到cout,cin,所以:

#include<iostream>

// 展开某个:把常用展开

using std::cout;

//指定将std(标准库即一个C++自带的命名空间域)中的cout展开

using std::endl;

//指定将std(标准库即一个C++自带的命名空间域)中的cin展开

int main()

{

cout << "hello world" << endl;

cout << "hello world" << endl;

cout << "hello world" << endl;

//......

return 0;

}

以上3个代码块运行截图相同且为:

在这里插入图片描述

总结:建议项目里面不要去展开using namespace std,建议日常练习可以这么玩。

项目建议指定访问

命名空间域的嵌套

现在以道友的智慧就好理解如下代码了

<code>namespace N1

{

int a = 0;

int Add(int left, int right)//相加函数

{

return left + right;

}

namespace N2

{

int a = 1;

int Sub(int left, int right)//相减函数

{

return left - right;

}

}

}

int main()

{

printf("%d\n", N1::a);

printf("%d\n", N1::N2::a);//域N2中a的访问方式

printf("%d\n", N1::Add(1, 2));

printf("%d\n", N1::N2::Sub(5, 3));

return 0;

}

运行截图:

在这里插入图片描述

总结:命名空间嵌套就是在一个命名空间域里面再开辟另外一个域,这两个或三个或以上的域里面就可以有相同的变量名,按照指定方式即可访问对应内容

命名空间域嵌套的作用(命名空间嵌套可以解决什么问题?)

个人理解:

大型项目往往是由多个人写的,每个人都有可能会起到相同的变量名,若有几个人的代码变量名相同或者自己写的代码也有可能会变量名冲突(相同),由于项目大内容多不利于修改,所以我们的C++祖师爷(发明者)设计了命名空间嵌套



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。