我们在写c++的代码或者看别人写的代码的时候,经常看到这样的代码:
std::cout << "Hello Word" << std::endl;
这句代码是一个输出语句,对于这个语句,我们主要看前面的std::。
解释:
1. std是一个命名空间的名字,是一个c++标准的命名空间
2. 而cout和endl是std命名空间中的"对象"。
1. 什么是命名空间:
举个例子: 我们上学的时候,会遇到一些名字相同的时候,比如张伟这个大众话的名字, 假设自己班级有一个张伟,隔壁班级也有一个张伟,如果学校在喇叭里喊:张伟同学请到办公室来, 这时张伟可能就懵逼了,你是在叫我呢,还时叫隔壁那个班的呢,这样就会出现BUG。
实际开发: 如果两个人同时开发一个项目,一个人负责一个模块。 如果两个人平时定义函数名字或者变量名字的习惯类似,他们在写代码的过程中,定义了一个相同的函数名,这种情况,如果将代码合起来的时候就会出问题,程序中是无法使用相同名字的函数名和全局变量的
命名空间: 为了解决上面的问题,c++使用了命名空间,用来解决命名冲突的问题。
举例子:
/*不使用命名空间时命名空间*/
// a写的代码
float price = 14.1;
std::string name = "数学书";
// b写的代码
float price= 10;
std::string name = "英语书";
std::cout << price << endl; // 上面的代码明显price和name命名冲突了,会出错
/*使用命名空间*/
namespace mathBook { // a写的代码
float price = 14.1;
std::string name = "数学书";
}
namespace EnglishBook { // b写的代码
float price= 10;
std::string name = "英语书";
}
// 这样就不会产生冲突了
使用命名空间打印: std::cout << mathBook::price << endl; // 打印mathBook空间下的price = 14.1
std::cout << EnglishBook::price << endl; // 打印EnglishBook空间下的price=10
可以看出使用命名空间之后,就可以解决命名冲突的问题了
2. 命名空间的几种使用
1)就是我们上面写到的在变量名或者函数名的前面加上其所在的命名空间。
上面第一行输出出错了,原因: 因为我们同时指定了在默认情况下使用EnglishBook中的量,又指定了在默认情况下price使用mathBook中的,但是EnglishBook中也有price,如果只写price编译器就不知道到底使用的哪个的price,就出错了。改进方法: 在price加上命名空间