2-1:C++快速入门之命名空间
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-1:C++快速入门之命名空间相关的知识,希望对你有一定的参考价值。
一:C++关键字
为什么这里要提及关键字呢。因为任何语言的关键字都是很特殊的,它是独一无二的。C语言共计32个关键字,C++共计63个关键字。
二:命名空间
情景导入:
一项工程,需要你和小王一起完成,你们两个在各自编写模块时都编写了一个相同名字的接口(函数),等到代码合并时,就出现了错误,原因可想而知,C/C++中,变量,函数以及类会作用域全局域中,相同的名字导致了命名冲突或名字污染
C语言不能有效的解决这样的问题。比如,我们都知道scanf
函数是C语言的标准输入输出函数,但是下面的这样一个操作中,肯定是有歧义的,但是语法上似乎没有大的错误提醒
scanf
是函数名,却可以当作变量名。不过最后肯定是无法输出的,因为产生了歧义。在编译中首先展开了stdio.h
头文件,scanf
函数就在其中(函数名就是函数的首地址),所以执行到这一步,编译器不知道这里应该是要输出这个函数的地址还是要输出你定义的那个变量。
当然这些问题,可以用C++中的命名空间去解决
(1)命名空间的作用
C/C++中,变量,类的名称将存在于全局作用域中,重复的名字或其他问题将导致一些不可预见的错误。命名空间可以有效的解决这个问题,使用命名空间目的在于将标识符的名称本地化,以免冲突。
简单点来说,把名字关进“小黑屋”,你的变量名字和我的变量名字即便是一样的,但是本质是不一样的,使用时按照一定方式打开“小黑屋”
(2)命名空间的定义
A:命名空间的定义
定义命名空间时,要使用namespace
关键字,其后紧接该命名空间的名字,然后写上“{}”,括号内即是该命名空间的成员。有点像结构体。
namespace N1//将改命名空间定义为“N1”
{
int a;//可以存放变量
void swap(int* a,int*b)//可以存放函数
{
int temp=*a;
*a=*b;
*b=temp;
}
}
当然命名空间也是可以嵌套的
namespace N2
{
int a;
namespace N3
{
void swap(int* a,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
}
}
}
同一个工程文件允许存在多个相同名称的命名空间,编译器最后会将其合并到同一个命名空间中。
B:注意事项
定义好命名空间,就相当于定义了一个新的作用域(“小黑屋”),命名空间中的所有内容都局限于该命名空间,除非使用时进行释放(打开“小黑屋”)。
如下,对于上面的那个例子中,如果定义命名空间,将不会出现错误:
(3)命名空间的使用
命名空间定义好之后,就把它关进“小黑屋”了,那么该如何使用呢。具体来说,有以下三种方法,各有其优缺点
1. 命名空间名称和作用域限制符
2. 使用using
将成员导入
3.暴力导入
所以在最开始提及的输出Hello World!
的程序中,using namespace std
的作用就是将C++库进行导入。
总的来说,日常练习时,为了方便,可以使用第三种暴力导入,但是在实际开发中,应当使用第一种和第二种,如果某个变量使用的较多的话,就使用第二种预先将这个变量名导入。
以上是关于2-1:C++快速入门之命名空间的主要内容,如果未能解决你的问题,请参考以下文章