C++中的命名空间

c++中的命名空间

C++是一种面向对象的计算机程序设计语言。
C++是C语言的继承,进一步扩充和完善了C语言。它肯定与C语言相比有许多不同,这篇文章就namespace这一个关键字来说一哈。
首先先来一个大家很熟悉的你好世界,

#include<iostream>
using namespace std;

int main(void)
{
    cout << "hello world~" << endl;
    return 0;
}

大家就会发现,比起C,C++在头文件和main函数中多了一串代码,

using namespace std;

这串代码是什么?
这串代码有什么用?
怎么样使用?
解决这三个问题似乎就是当务之急。下面就我个人理解主要是网课看多了 ,给大家阐述。

Examlpe:

#include<stdio.h>
int main(void)
{
    int printf = 0;
    return 0;
}

小明是个很倔的人,他写代码就想搞一个名字叫做printf的变量,怎么办?
小明和小王为同一个项目编写代码,都使用了fork这个变量,合并成一个程序执行代码的时候,以谁的fork为准?
C++为解决以上命名冲突问题,新增了一个命名空间,其中使用的关键字就是namespace
语法如下

namespace name
{
 int printf = 0;  //可以申明变量,函数等等,
}

调用:用域操作符 ::

//name::变量名等
cout << name::printf << endl;

这表明printf是命名空间name中的变量,并不是打印函数。

其中name就是命名空间的名字,看个人喜好取名,这样就保证了每个人用每个人的变量,函数名等。

来一个巩固:

namespace N {
     int printf = 0;
}//命名空间的声明
cout << printf << endl;
cout << N::printf << endl;

VS 上的输出为:一个为printf指针的大小,一个为N命名空间中的变量printf, 当然为0。

那么,一个问题接着而来,小明在项目中要用到自己独有的变量fork,他申明了xiaoming这个命名空间,

namespace xiaoming{
 int a = 0;
 int fork = 0;
}

but他要在接下来的代码中使用几千次fork,那不是要输入几千次域操作符?so,命名空间的展开随之而来。

using namespace xiaoming;

告诉编译器,xiaoming这个命名空间展开,接下来不加修饰的fork这个变量,就是xiaoming的fork。但是,显而易见的问题,那为什么我不直接把变量写在main中?命名冲突还会出现。 所以,工作时不推荐展开,但平时练习可以使用。

但是,可以只展开常用的。

using xiaoming::fork;

这样就只展开fork这个变量,变量a并不展开。

1,命名空间可以合并。如果在不同地方声明两个相同的namespace,编译器在执行时会将其中的内容合并。

2,命名空间可以嵌套。

namespace N1{
    int a = 0;
    int b = 1;
    namespace N2{
    int Sum(int number1,int number2)
          {
               return number1+number2;
          }
    }
}

调用Sum函数:N1::N2::Sum(1,2);

现在来解决刚开始的代码,

using namespace std;

std是标准函数库使用的命名空间,写上这一句,就相当于C语言中引入stdio.h头文件,在std中声明了各种函数,如printf。当然,并不一定要写上这一句,也可以这样,

#include<iostream>
int main(void)
{
   std::cout <<"hello world~" << std::endl;
   return 0;
}

只是为了方便,通常会写上这一句。同样的,多人工程中不推荐。
本人也是最近开始学习C++,如有问题或是共同学习,欢迎大家来指正或是讨论。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值