C++入门——命名空间

一.C语言缺陷之命名冲突

看下面的代码

这里面报错说是rand类型重定义了。这是为什么呢?因为stdlib.h中已经定义了rand,而在打印时,它是在全局寻找rand,发现有两个rand,就是重定义。

那么发明c++的大佬本贾尼发现了这一bug,就开创出了命名空间这一个语法。

二.命名空间的定义

命名空间需要使用namespace关键字,后跟空间的名字,再加一对{},括号中就是这个空间内的成员

命名空间就相当于在全局中圈出一块位置,相当于在山上圈出一块地,有人承包改造成菜园。

三.命名空间的使用

1.命名空间中可以定义变量,函数,类型

2.命名空间的使用

方式一:加命名空间名称以及作用域限定符

这是一个打印语句(后面会讲到),要想打印zyh中的rand,就要加上作用域限定符::,表示到zyh这块空间中寻找变量rand,而不是去全局中找库中的rand。这就好像拿到裁员中的钥匙,打开裁员去摘菜。

但要是没有指定命名空间,就会去全局寻找,这里的全局是将命名空间除外,因为命名空间是被别人承包的菜园,没有许可不可以进入。

方式二:使用using将整个命名空间引入

这个操作就是展开命名空间,就好像直接将菜园放开,所有人都既可以摘菜园以外的庄稼又可以摘菜园中的菜。

所以这时候rand就又不能使用了,因为菜园以外有rand,菜园中也有rand,重复了。

方式三:使用using将命名空间中的某个成员引入

有些时候,命名空间中的成员太多,但是真正使用到的只有那几个,这时就可以如下:

但是下面这个就会报错:

这是为什么呢?不是引入命名空间了吗?为什么还会有多次声明?因为,只要不是把整命名空间引入,那编译器就是在全局(标准库)以及引入的变量中寻找rand,所以就会导致rand重定义

3.注意事项

1.如果有两个同名的命名空间,那么最后就会将这两个命名空间进行合并,变成一个命名空间

2.命名空间可以套用

命名空间中也可以定义命名空间

四.命名空间的应用之输入与输出

前面我们用到了cout,其实他就是一个标准输出对象

1.cin,cout

这两个是流对象,cin是标准输入对象(键盘),cout是标准输出对象(控制台)它们其实是定义在std这个命名空间中,而这个命名空间定义在iostream头文件中,所以在使用时要引入iostream头文件,并且要用上面讲到三种方式使用std这个命名空间。

2.endl

它是一个特殊的c++符号,表示换行输出,也在std中,它也可以使用'\n’来代替

3.<<是流插入运算符 >>是流提取运算符

4.c++的输入输出比C语言更方便,可以自动识别类型

不像printf,scanf那样需要手动控制格式

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值