第三点:命名空间可以嵌套命名空间

说明:面对不同场景,需要嵌套多层命名空间起到隔离的效果。

具体场景:现在A公司有一堆重要数据,A公司用命名空间将这些数据圈起来。A公司里面有两个程序员B和C。B程序员做了个Push函数实现压栈的功能,而C程序员做了Push函数实现插入元素的功能,在A公司所定义的命名空间,出现名称冲突的问题,对此需要B和C程序员定义自己的命名空间存放自己的数据。这里就需要命名空间的嵌套。

#include 
using namespace std;
namespace A_company
{
    namespace B_epe
    {
        Push();
    }
     namespace C_epe
    {
        Push();
    }
}
使用方式:cout<<A::B_epe::内容<<endl;
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

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

//test.h
   namespace N
{
    int a;
    int d;
}

//test.cpp
    namespace N
{
    int a=1;
	int Add(int x,int y)
    {
        return x+y;
    }
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说明:这里重定义不是指命名空间名称冲突,而是当相同名称的命名空间合并同一个命名空间中,变量a名称冲突导致。

四、编译器搜索原则

int x=10;
int main()
{
    int x=1;
    printf("%d\n",x);//1
    printf("%d\n",::x)//10
        return 0;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

五、命名空间三种使用方式

namespace N
{
    int a=1;
    int b=0;
    int Add(int x,int y) {return x+y;}
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

第一种:加命名空间名称及作用域限定符

int main()
{
    printf("%d\n",N::a)
        return 0;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

第二种:使用using将命名空间中某个成员引入(打开某个成员权限)

将N命名空间中变量b的权限打开

using N::b;
int main()
{
    printf("%d\n",b);
    printf("%d\n",N::a)
        return 0;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

第三种:使用using namespace命名空名称引入

将N命名空间展开(跟头文件的展开是不同的,就像李大爷说你可以来我家菜园顺便采菜)

using namespce N;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    Add(10, 20);
    return 0;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

关于上面三种方式,在日常练习或竞赛中更加推荐使用第三种更为简便方式,而对于在工作中更加推荐使用上面两种方式,使得程序更具有安全性。

六、简单了解:C++输入与输出

#include 
using namespace std;

int main()
{
    cout<<"Helloc world"<<endl;
    return 0;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
  1. 使用cout标准输出对象(控制台)和cin标准输入对象时,必循包含头文件以及按照命名空间使用方式使用std
  2. coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中
  3. 使用C++输入输出更加方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型
  4. 实际上coutcin分别时ostreaminstream类型的对象,>>和<<也涉及运算符重载等知识。 这里只需要简单学习他们的使用就行,后面还有不断深入学习

关于第三点与第四点

#include 
using namespace std;
int main()
{	//为什么Cpp兼容C,对此一些符号可以有多重意思
    <<:可以表示左移或者流插入(自动识别类型)
        int i=10;char p='a';
    i=i<<1;
    cout<<i<<p<<endl;
    >>:可以表示右移或者流提取(自动识别类型)
        int a=0;
    cin>>a;

    关于自动识别类型的功能:关于精度打印可以使用printf函数
        比如:double d=1.11111;
    printf("%.2lf\n",d);
    cout<<d<<endl;
    对此显然时printf更加胜任这些操作,当然可以根据不同场景选择输入即可。
        return 0;
}
其中关于cout和cin还有很多更加复杂的用法,这里就不展开学习
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

早期标准库将所有功能在全局域中是实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C语言中头文件区分,也为了正确使用命名空间,规定C++头文件不带.h.旧编译器(vc6.0)中还支持格式,后续编译器已不支持,因此推荐使用+std的方式

六、std命名空间的使用惯例

std是C+标准库的命名空间,如何展开std使用更加合理呢?


我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:
以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二呀C++笔记,希望对你在学习C++语言旅途中有所帮助!
请添加图片描述

data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/2302_79177254/article/details/140668996","extend1":"pc","ab":"new"}">>
注:本文转载自blog.csdn.net的是店小二呀的文章"https://blog.csdn.net/2302_79177254/article/details/140668996"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!