一、🌞命名空间
1️⃣命名空间存在的意义是防止命名冲突
2️⃣一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
1.1💡命名冲突
我们知道变量、函数有很多,这些变量和函数大量存在于全局作用域中,会导致命名冲突,用strlen函数为例。
如果要定义一个以strlen为变量名的变量,并且引了<string.h>,就会发生以下情况:
#include<string.h>
int strlen = 0;
int main()
{
return 0;
}
error C2365: “strlen”: 重定义;以前的定义是“函数”.
如果要解决这一问题,就要用到命名空间
1.2💡命名空间的性质
1️⃣命名空间中的内容,既可以定义变量,也可以定义函数
// yyh为命名空间的名称
namespace yyh
{
//strlen为变量名
int strlen = 0;
int Add(int x, int y)
{
return x + y;
}
}
2️⃣命名空间可以嵌套
// yyh为命名空间的名称
namespace yyh
{
int strlen = 0;
int Add(int x, int y)
{
return x + y;
}
namespace yyh1
{
int a = 0;
}
}
3️⃣同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中(不同文件也行)
// yyh为命名空间的名称
namespace yyh
{
int strlen = 0;
int Add(int x, int y)
{
return x + y;
}
}
namespace yyh
{
int a = 0;
}
但是如果我们在主函数里使用就会发现会出问题
// yyh为命名空间的名称
namespace yyh
{
int strlen = 0;
int Add(int x, int y)
{
return x + y;
}
}
int main()
{
printf("%d", Add(1, 2));
return 0;
}
error C3861: “Add”: 找不到标识符
1.3💡命名空间的用法
命名空间的三种正确用法:
1️⃣指定命名空间
int main()
{
printf("%d", yyh::Add(1, 2));
return 0;
}
这个方法写起来很麻烦,但是是最规范的方式
2️⃣使用using(对部分展开)
using yyh::Add;
int main()
{
printf("%d", Add(1, 2));
return 0;
}
这种方法可以对库里面常用的函数展开,比如:
using std::cout;
using std::endl;
项目中经常用
3️⃣使用using namespace
using namespace yyh;
int main()
{
printf("%d", Add(1, 2));
return 0;
}
这种方法用起来很简单,比如用using namespace std;但是如果我们自己定义的东西跟库起冲突,就没办法解决了,所以在项目中不推荐
二、🌞输入与输出
输入并输出:“hello”
#include<iostream>
using std::cout;
using std::cin;
us