0. using声明使特定的名称可用,using编译指令使整个名称空间的名称可用;
1. using声明,由被限定的名称和它前面的关键字”suing“组成,如:using Jill::fetch; (Jill名称空间名,fetch 具体名称)
using编译指令,由名称空间名和它前面的关键字“using namespace”组成,如:using namespace Jill;
2. 如果函数中定义了一个变量(fetch),则using声明不能再导入相同名字的名称,而using编译指令,可以使用作用域解析运算符,导入相同名字的名称;见下面例子:
--------------------------------------------------------------------------------------------------------------------------------------
0. using声明
0.1 将名称添加到局部声明区域中:
namespace Jill{ double bucket (double n){......} double fetch; struct Hill {.......}; }; char fetch; int main() {
using Jill::fetch; // 用using声明 “fetch”为 局部声明区域中; double fetch; // Error ! already have a local fetch;与using编译指令中的用法做比较<--- cin>>fetch; // 读入到 Jill ::fetch; cin>>::fetch; // 读入到 全局 fetch; ...... }
0.2 将名称添加到全局声明区域中
void other(); namespace Jill{ double bucket(double n){......} double fetch; struct Hill{......}; }
using Jill::fetch; //using将“fetch”名称添加到全局声明区域中;
int main()
{
cin>>fetch;//OK,读入到Jill::fetch;
other()
......
}
void other()
{
cout<<fetch;//OK,显示Jill::fetch;
}
1. using编译指令
namespace Jill{
double bucket(double n){......}
double fetch;
struct Hill{......};
}
char fetch; //全局 fetch;
int main(){
using namespace Jill;
Hill Thrll;
double water=bucket(2);//use Jill::bucket();
double fetch; //OK,隐藏Jill::fetch;此处注意与前面的using声明用法做比较<---
cin>>fetch; //读入到local fetch ;
cin>>::fetch; //读入到全局fetch;
cin>>Jill::fetch;//解析,读入到Jill::fetch;
......
}
int foom()
{
Hill top; //error! using编译指令在函数中使用时,使得名称空间中的名称被视为在函数之外的声明,但该文件中的其它函数仍不能使用它们!
Jill::Hill crest;//ok,使用using声明;
}
注:如同时有名称空间Jill和Jack ,则在代码中使用作用域解析运算符(::),将不会冲突:
Jill::fetch=3; Jack::fetch=5;然而使用using声明时,using Jill::fetch;
using Jack::fetch;
fetch=5; //error,出现二义性;