理論鋪墊:
using 聲明:明確指定使用哪個作用域下的實體,比如: using std::vector。一次只能引用一個命名空間的一個成員。
using 指示:明確指定引用哪個命名空間,比如:using namespace std。相當於引用所有成員。
using 聲明和指示可以出現在:全局作用域、局部作用域、命名空間作用域,但僅using聲明可以出現在類的作用域中(定義類的{}裏)。
using 聲明引用A之後,會屏蔽外層作用域同名實體,比如以下代碼,輸出是
ns1
ns2
ns1
ns1 //這裏不是ns2
ns1
ns2
#include <iostream>
namespace ns1
{
void foo(int)
{
std::cout << "ns1" << std::endl;
}
}
namespace ns2
{
void foo(double)
{
std::cout << "ns2" << std::endl;
}
}
int main(int argc, char const *argv[])
{
int a = 10;
double b = 11.1;
using namespace ns1; //using 聲明
using namespace ns2; //using 聲明
foo(a); //ns1::foo(int)
foo(b); //ns2::foo(double)
using ns1::foo; //using 指示,屏蔽了上面2處聲明
foo(a); //ns1::foo(int)
foo(b); //ns1::foo(int),不是ns2::foo(double)
using ns2::foo; //using 指示,新引入重載函數
foo(a); //ns1::foo(int)
foo(b); //ns2::foo(double)
return 0;
}