限定名称,命名空间

来源:互联网 发布:windows redstone 4 编辑:程序博客网 时间:2024/05/21 08:30
假定有这样一种情况:有两个命名空间,分别是ns1和ns2,但是要使用ns1中的定义函数fun1和ns2中的定义函数fun2,但是问题在于在ns1和ns2两个命名空间内都定义了一个my_function 的函数(假定所有函数都不获取任何参数,忽略操作符重载)在这种情况下,以下语法是错误的:
using namespace ns1;using namespace ns2;

因为它会提供有冲突的my_function 定义。

所以可以采取一种方式,指出自己准备使用的命名空间ns1中的fun1和ns2中的fun2但是不准备使用命名空间的ns1和ns2中的其他任何东西,以下语句声明可以解决问题:

using ns1::fun1;using ns2::fun2;
以下声明
using Name_Space::One_Name
会使用Name_Space中名称One_Name进入可用状态,但是Name_Space中的其他名称不能 使用。
作用域解析操作符::
void Dig::advance(int hours_added,int minutes_added){...}
在这种情况下,操作符::表示函数advance 是为Dig类定义的,和其他任何类中的同名函数没有关系,和上述的命名空间一样。

现在假定使用ns1中的定义的fun1但是只是使用一次或者少数的几次,在这种情况下,可以在函数名前面直接附加命名空间的名称以及作用域解析操作符ns1::fun1();

指定参数类型的时候,经常需要采用这种形式

int get_number(std::istream input_stream)...
在函数get_number中参数input_stream 属于istream类型istream采用的是在std命名空间中的定义,在std命名空间内如果类型名称istream 是唯一需要的名称或者希望所有名称都采用std::前缀进行类似的限定,就不要使用using namespace std;