namespace N1//命名空间的名字
{
//定义变量
int rand = 10;
//定义函数
int Add(int left, int right)
{
return left + right;
}
//定义类型
struct Node
{
struct Node* next;
int val;
};
//嵌套命名空间
namespace N2
{
int Sub(int left, int right)
{
return left - right;
}
}
}
注意:
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
用一个工程中允许出现多个相同名称的命名空间,编译器最后会将它们合并为一个命名空间。
📒3.3命名空间使用
命名空间的使用有三种方式:
加命名空间名称及域作用限定符
cpp复制代码
namespace N
{
int a=10;
int b=5;
}
int main()
{
printf("%d\n", N::a);
return 0;
}
使用 using 将命名空间中某个成员引入
cpp复制代码
using N::b;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
return 0;
}
使用 using namespace 命名空间名称引入(展开命名空间)
cpp复制代码
namespace N
{
int a=10;
int b=5;
}
int a=20;
using namespce N;
int main()
{
printf("%d\n", a); //a不明确,有二义性
printf("%d\n", ::a); //访问全局的a
printf("%d\n", N::a); //访问N中的a
printf("%d\n", b);
return 0;
}
namespace N
{
int a = 10;
namespace N1
{
int a = 20; //将外层作用域的a隐藏了
int b = 15;
namespace N2
{
int c = N1::b;
}
}
int main()
{
printf("%d\n", N::N2::c);
printf("%d\n", N::N1::a);
printf("%d\n", N::a);
return 0;
}
📒3.5std命名空间的使用
std是C++标准库的命名空间,如何展开std使用更合理呢?
在日常练习中,建议直接using namespace std;即可,这样就很方便。
using namespace std;展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型、对象、函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模 大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间例如: using std::cout展开常用的库对象、类型等方式。
四、C++的输入和输出
cpp复制代码
#include <iostream>
using namespace std;
int main()
{
int a = 10;
double b = 10.5;
cout << a << endl;
cout << b << endl;
return 0;
}