目录
一、什么是命名空间
命名空间就是一个新定义的作用域,里面可以存放自定义类,变量,函数等,主要用来防止命名冲突。
二、命名空间的语法
1.创建命名空间
使用关键字:namespace
namespaces namespaces_name
{
//命名空间的内容...
}
注意:最后不用加分号(;)
例子
//创建一个名字为myspace的命名空间 namespace myspace { //... }
2.使用命名空间
(1)标明作用域
例子:
#include <iostream> int main() { std::cout << "声明作用域" << std::endl; return 0; }
(2)展开命名空间(需谨慎)
例子:不想标明作用域,展开命名空间
#include <iostream> using namespace std;//展开命名空间 int main() { cout << "展开命名空间" << endl; return 0; }
(3)使用using声明
例子:不想完全展开名空间,声明部分
#include <iostream> //using 声明 using std::cout; using std::endl; int main() { cout << "展开命名空间" << endl; return 0; }
3.命名空间可嵌套
namespace myspace1
{
int mul(int x, int y)
{
std::cout << "myspace1: mul:";
return x * y;
}
namespace myspace2
{
int add(int x, int y)
{
std::cout << "myspace2: add: ";
return x + y;
}
}
}
int main()
{
std::cout << myspace1::mul(10, 20) << std::endl;
std::cout << myspace1::myspace2::add(10, 20) << std::endl;
return 0;
}
4.命名空间可以同名
编译器会将所有的同名命名空间合并成一个命名空间
例子:
namespace myspace { int mul(int x, int y) { std::cout << "myspace: mul:"; return x * y; } } namespace myspace { int add(int x, int y) { std::cout << "myspace: add: "; return x + y; } } int main() { std::cout << myspace::mul(10, 20) << std::endl; std::cout << myspace::add(10, 20) << std::endl; return 0; }
三、是否要展开命名空间
是否要展开命名空间(例如使用
using namespace ...;
)取决于具体的编程场景和项目需求。以下是一些考虑因素:
方便性:展开命名空间可以使得代码更简洁,减少前缀的使用,提高代码的可读性。例如,
std::cout
在展开std
命名空间后可以简化为cout
。命名冲突:展开命名空间可能会引入命名冲突。如果命名空间中的某个名称与当前作用域中的其他名称相同,那么不加前缀的使用将会导致编译器无法确定应该使用哪个名称。这可能导致难以追踪的错误。
代码清晰度:使用完整的命名空间前缀(例如
std::
)可以使得代码的来源更加明确,特别是当使用多个命名空间时。这有助于读者理解代码中使用的实体是来自哪个命名空间。项目规模:对于小型项目或个人练习,展开命名空间可能不是大问题。然而,在大型项目中,特别是在涉及多个库和模块的复杂项目中,避免全局展开命名空间通常是更好的做法。