相较于C语言来说,C++提供了命名空间,在进行多人协作的时候,能够解决变量与函数名重复的问题
iostream与iostream.h
C++与C头文件的标准不同
初学C++时,我对using namespace std感到有些困惑,原来在iostream里面,它所定义的东西都在名字空间std中
#include<iostream>
using namespace std;
______________________________________________________________
#include<iostream.h>//在C++标准中不支持
在iostream.h中定义全局命名空间,而在iostream中并未定义命名空间
命名空间的相关定义代码
命名空间的定义基本代码如下
namespace namespace_name
{
}
在调用命名空间中的内容时,用到 :: 符号,以下是相关介绍
::表示作用域,和所属关系。
::是运算符中等级最高的,它分为三种:
1)global scope(全局作用域符),用法(::name)
2)class scope(类作用域百符),用法(class::name)
3)namespace scope(命名空间作用域符),用法(namespace::name)
他们都是左关联(度left-associativity)
调用的代码如下
name::code; // code 可以是变量或函数
using namespace指令
该指令会使后续的代码使用指定的命名空间中的名称,示例如下
using namespace std;
注意:using 指令引入的名称遵循正常的范围规则。名称从使用 using 指令开始是可见的,直到该范围结束。此时,在范围以外定义的同名实体是隐藏的。
同时也可以指定特定的项,例如
using name::code;
这样在之后的代码里就不需要前缀了
不连续的命名空间
在分开的部分中,将代码定义到一个共同命名空间
代码同一般的定义代码
namespace namespace_name
{
}
最后使用的就是命名空间各部分的总和
命名空间的嵌套
运用::运算符一级级的进行访问
namespace namespace_name1
{
namespace namespace_name2
{
}
}
using namespace namespace_name1::namespace_name2;
在使用namespace_name1时便包括了namespace_name2中的内容
但是当namespace_name1中的命名与namespace_name2中的命名重复的时候,是以选择的一级为优先,即有重复时要具体到那一级。
#include <iostream>
using namespace std;
namespace A
{
int a = 100;
namespace B
{
int a =20;
}
}
using namespace A
int main(int argc, char *argv[])
{
cout <<"a ="<<a << endl;//输出为a = 100即命名空间A中的
return 0;
}
全局变量 a 可以表达为 ::a,用于当有同名的局部变量时来区别两者。例如:
#include <iostream>
using namespace std;
namespace A
{
int a = 100;
namespace B //嵌套一个命名空间B
{
int a =20;
}
}
int a = 200;//定义一个全局变量
int main(int argc, char *argv[])
{
int a = 30;
cout <<"a ="<<a << endl;//输出30
cout <<"::a ="<<::a << endl;//输出200
return 0;
}
注意:使用多个命名空间时内容是不能够重复的