当我们在使用C++语法进行编程练习的时候,往往在代码的前两行会这样来写:
include |
using namespace std; |
学过C语言的同学在学习C++的时候是否会产生这样的疑惑呢:
练习C语言编程的时候,只需要声明一个头文件:#include
其中第一行include
针对这个问题,网络上有很多专业的说法,但是长篇大论的内容,对于初学者来说实在头疼,根本看不进去,所以接下来我希望可以用简练的语言来解释清楚using namespace std的作用,以下的内容虽可能有些许冗余,但我相信是通俗易懂的,您只要能够一行行的看下去,一定能够完全看懂!
本人认为正确的学习顺序是:我们要做到先学会定义、使用和理解命名空间(namespace),再回过头去研究using namespace std;的作用,这样可以起到事半功倍的效果,那么接下来重点就来了。
(1)定义简单的命名空间
//1、定义命名空间A
namespace A
{
int a=0;//在命名空间A中定义变量a
}
定义一个命名空间就是这样简单:在这个命名空间A中,有一个int型的变量,他的名字是“a”。那么我们接下来直接上难度!定义一个复杂的命名空间。
(2)定义复杂的命名空间
要求:定义命名空间B,并在命名空间B中定义命名空间C,并在命名空间C中定义结构体Teacher
//2、复杂的命名空间
namespace B //定义命名空间B
{
int a=1;//在命名空间B中也可以定义变量a,因为他们不在同一个命名空间中
namespace C//还可以在命名空间B中再定义一个命名空间C
{
struct Teacher//在命名空间C中定义结构体Teacher
{
char a[32];//结构体中还可以定义变量a,因为这三个“a”都不在同一个命名空间中
int b;
};
}
}
(1)使用命名空间的基本方法
前面已经定义好了命名空间A、B、C,且在这三个命名空间中都定义相同的变量“a”,接下来我们就来使用这三个命名空间。
int main()
{
//使用命名空间的基本方法1
using namespace A;//告诉编译器我要使用命名空间A中的功能了
a=10; //将命名空间A中的变量“a”由0更改为10
cout<
注意:此时只使用了命名空间A,所以只会对命名空间A中的变量a进行访问,而不会对命名空间B、C中的变量a进行访问。而实际上,针对上面这三行代码,只要第三行代码中变量“a”的指向明确,便可以省去第一行“using namespace A”,如下:
//使用命名空间的基本方法2
//由于在代码中只要使用这两种方法中的其中一种即可,所以我在第二种方法这里加上的“//”注释符号,如下两行代码:
// a=10;
// cout<
以上两种使用命名空间的方法供君随意挑选^_^
(2)使用复杂的命名空间
命名空间A的使用相对简单,但是在命名空间B中嵌套着命名空间C,并且命名空间C中又嵌套着结构体Teacher,那么我们又该如何去使用命名空间B和命名空间C呢?
接下来,除了使用命名空间A以外,如果我们还使用了命名空间B的话," a=10; " 这条语句的指向就不明确了:因为命名空间B中也有个变量a,于是现在有两个"a"可以被访问。故:若想访问某一个特定的变量a就需要指向明确!
using namespace B;
//如果想访问某一个特定的变量a,就需要指向明确!如下:
cout<
(3)使用结构体Teacher中的变量
//如何使用Teacher
//方法1:这种方法每定义一个结构体就需要:“B::C::Teacher 结构体名称”
//B::C::Teacher t1;//用命名空间B中的命名空间C中的结构体模板(Teacher)来定义结构体t1
//t1.b=33;//注意:t1.a 语法错误!是因为a是一个指针(地址),这个指针是无法被修改的,否则以后无法释放内存
//方法2:先一口气直接定义好“结构体型”数据类型,然后按照根据数据类型定义变量的方法来使用结构体
using B::C::Teacher;
Teacher t2;
t2.b=22;
return 0;
}
(1)通过以上关于命名空间的定义及使用的介绍,我们不难发现:不同的命名空间之间是相互独立的个体,虽然附加在其中的变量名可能是相同的(比如上面所提到的命名空间A、B、C中都包含有变量a),但是没关系:“命名空间” 这层 “屏障”将这些相同的变量名分隔开来,让他们虽然拥有相同的名字,但是互不影响。
(2)看起来命名空间的引入十分方便,让我们不必再因为变量重名而烦恼。但是在以前,并没有命名空间这个概念,而是将标准库功能定义在全局空间里,并声明在
(3)当使用
(4)最后:如果大家想进一步了解相关内容,请参考:点击打开链接 谢谢。