1
#include <iostream>
using namespace std;
namespace extra
{ int i; }//Declared an integer i here
void i()
{
using namespace extra;
int i; //We called namespace extra at above then we declared another i
i=9;
cout<<i;
}
int main()
{
enum letter{i,j};
class i{letter j;};
::i();
return 0;
}
正如我在上面的註釋中所解釋的,我們首先在名稱空間聲明一個整數i,然後在調用它之後我們聲明另一個整數然後給它一個值9.我的問題是爲什麼這不會導致重新指定錯誤?也在代碼行C++爲什麼這不會導致重新篩選錯誤?
i=9;
我的價值獲得值9?命名空間中的一個還是void i()函數中的一個?
注意:請原諒我可憐的英語。
'使用命名空間額外;'不會從命名空間中帶入所有內容,它的意思是「當查找一個名稱**也**看看該命名空間」。但是因爲你有一個地方的'我'的聲明,所以沒有必要再看。 –
這實際上是一個很好的問題,但並不意味着它可以得到合理的答案。 C++確實有一些奇怪的規則來標識相同的名稱和陰影。但它恰好是這樣設計的。至少它不像JavaScript那樣瘋狂。 – VTT