#include<iostream>
using namespace std;
int main()
{
cout<<"Hello Word";
}
综述:相信以上代码是大多数人第一次接触c++的敲门砖,不难发现第一句代码是包含了一个头文件,它似乎与输入输出流有关,这与c语言还有些相似,但是第二句却让人有些摸不着头脑。别急,在以下的篇幅中,我将尽可能详细地描述清楚,欢迎不足之处补充说明。
1.为什么引入命名空间
先让我们假设这样的一个场景,同一个公司的小王和小明在一起编写了同一个项目后,两人都编写了add函数,那假设现在在项目中要调用add函数,那我们该怎么知道调用的是谁的add函数呢(假设add参数与操作不相同)?以下是编程时遇到和全局作用域当中变量冲突的情况
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”
所以为了避免访问函数时冲突,在写代码时,可以创造一个属于自己的命名空间,将代码中的变量,函数与类(类似c语言结构体)都存在于当前命名空间的作用域当中。
这样我们可以解释命名空间的意义了:
使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染。
2.1命名空间的定义
定义命名空间只需要使用namespace关键字,后边跟上命名空间的名字,然后接上一对{}即可,花括号中为命名空间成员。
// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。
// 我们上课用的是bit,大家下去以后自己练习用自己名字缩写即可,如张三:zs
// 1. 正常的命名空间定义
namespace bit
{
// 命名空间中可以定义变量/函数/类型
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
}
要注意的是
命名空间可以嵌套,使用嵌套命名空间与普通一样并无区别(使用方法在后面!);
第二个值得注意的点是如果命名了
相同的名字的命名空间时,编译器会自动将其合并,也就是说编译器允许相同名字的空间存在。
2.2命名空间的使用
namespace bit
{
// 命名空间中可以定义变量/函数/类型
int a = 0;
int b = 1;
int Add(int left, int right)
{
return left + right;
比特就业课
命名空间的使用有三种方式:
加命名空间名称及作用域限定符
使用using将命名空间中某个成员引入
使用using namespace 命名空间名称 引入
3. C++输入&输出
新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物,
}
struct Node
{
struct Node* next;
int val;
};
}
int main()
{
// 编译报错:error C2065: “a”: 未声明的标识符
printf("%d\n", a);
return 0;
}
上述代码意思的大概意思是 a变量不能直接使用
使用方法有三种:
2,2.1 命名空间加上作用域限定符号(::)
int main()
{
printf("%d\n", N::a);
return 0;
}
2.2.2 使用using将命名空间中某个成员引入
using N::b;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
return 0;
}
2.2.3 使用using namespace 将命名空间引入
using namespce N;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
Add(10, 20);
return 0;
}
这下大家知道了吧,标题所写为第三种命名空间的使用方法,这种方法将std命名空间直接使用,避免我们在使用函数等还要使用(::)符号,当我们做一些小项目的时候是完全可取的。
本次的分享到这里就结束了,感谢大家的观看!