using namespace X;
cout << var;
using Y::var;
cout << var;
假設我有一個命名空間 X 和一個命名空間 Y,它們都包含一個名為 var 的 int 型別變數。當我說using namespace X;我想象發生的事情是,如果我使用一些不在全域名稱范圍內的變數,基本上會發生什么,一切正常,我將尋找 var innamespace X但現在我也使用Y::var了這究竟是什么意思?這只是說 var 與 Y::var 相同嗎?但是在那種情況下發生了什么,using namespace X它甚至沒有在那里尋找 var 因為我說我正在使用Y::var?
uj5u.com熱心網友回復:
在 using 指令之后
using namespace X;
編譯器使用非限定名稱查找來查找var以下陳述句中使用的名稱
cout << var;
由于 using 指令,它將var在命名空間中找到變數X。
這個使用宣告
using Y::var;
在當前作用域中引入var來自命名空間的變數Y和下一條陳述句
cout << var;
將使用var命名空間中的變數Y。
這是一個演示程式。
#include <iostream>
namespace X
{
int var = 1;
}
namespace Y
{
int var = 2;
}
int main()
{
using namespace X;
std::cout << "var = " << var << '\n';
using Y::var;
std::cout << "var = " << var << '\n';
}
程式輸出是
var = 1
var = 2
即var在函式 main 的塊作用域中引入變數的 using 宣告隱藏了var在命名空間中宣告的變數的宣告X。
事實上,下面簡化的演示程式在本質上與上面的程式在名稱查找方面的行為類似。
#include <iostream>
int var = 1;
int main()
{
std::cout << "var = " << var << '\n';
int var = 2;
std::cout << "var = " << var << '\n';
}
uj5u.com熱心網友回復:
是的,當你要求時using Y::var;會隱藏。前者就像在此范圍內宣告一樣,后者僅影響不合格的查找。X::varvarY::var
using ns_name::name;using-declaration:使
name來自命名空間的符號ns_name可用于非限定查找,就像在與此using-宣告出現的相同的類范圍、塊范圍或命名空間中宣告一樣。
通過using 宣告引入命名空間范圍的名稱可以像任何其他名稱一樣使用,包括從其他范圍進行限定查找
using namespace ns_name;using-directive:從使用指令之后的任何名稱的非限定名稱查找的角度來看,直到它出現的范圍結束,每個名稱
ns_name都是可見的,就好像它是在最近的封閉命名空間中宣告的,其中包含無論是使用指示符和ns_name。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325449.html
