아니요 - 코드로 인해 재정의 오류가 발생하는 것을 볼 수 없습니다.
그리고 실제로는 compile it and see for yourself 수 있습니다.
편집 :
: ...
MSDN 페이지가
using
directive의 맥락에서 이름 충돌에 대해 이야기 이제 당신은 당신이 언급 한 MSDN 페이지에 대한 링크를 제공했다고 후속 조치
로컬 변수가 네임 스페이스 변수와 이름이 같은 경우 네임 스페이스 변수가 숨겨집니다. 전역 변수와 동일한 이름을 가진 변수 의 네임 스페이스를 갖는 것은 오류입니다. using
지침의 포함이 범위에 ns
네임 스페이스 내에서 선언 된 모든 이름을 제공
namespace ns
{
const int MAX = 3;
}
using namespace ns;
int main()
{
int MAX = 4; // local
int test = MAX; // test is 4, because the local variable is used
// as the namespace variable is hidden
}
하십시오 using
지시어로 범위를하게 됐어요 네임 스페이스 변수를 숨기는 지역 변수의
Here's an example . 그러나 MAX
값을 test
에 할당하면 네임 스페이스 변수 MAX
이 숨겨져 있으므로 할당에 사용 된 로컬 변수 MAX
이됩니다. 로컬 변수가 우선하며 네임 스페이스 변수를 숨 깁니다.
다음은 네임 스페이스 변수와 전역 변수 사이의 충돌 예입니다. 코드의 수정 조각을 고려 (그리고 당신은 here 컴파일 볼 수 있습니다) :
const double MAX = 3.5;
namespace ns
{
const int MAX = 3;
}
using namespace ns;
int main()
{
int test = MAX;
}
가 다시,
using
지시어 범위에
ns:MAX
을 제공하고, 글로벌 변수
MAX
은 범위도있다. 이름
MAX
지금 모호하기 때문에
내가 main()
에서 MAX
라는 변수를 사용하여 이동, 컴파일러는 오류를보고합니다 : 그것은 있기 때문에, 우리가 참조하는 MAX
를 알 수있는 방법이없는 두 개의 로컬이 아닌 MAX
두 가지 중에서 선택할 수 있습니다. 둘 다 우선 순위가 없습니다.
prog.cpp: In function ‘int main()’:
prog.cpp:13: error: reference to ‘MAX’ is ambiguous
prog.cpp:2: error: candidates are: const double MAX
prog.cpp:6: error: const int ns::MAX
prog.cpp:13: error: reference to ‘MAX’ is ambiguous
prog.cpp:2: error: candidates are: const double MAX
prog.cpp:6: error: const int ns::MAX
관심이 있으신가요? MSDN 페이지에 대한 링크를 제공 할 수 있습니까? – razlebe
Remarks에 있습니다 .http : //msdn.microsoft.com/en-us/library/aewtdfs3%28v=vs.80%29.aspx –
내 대답을 그에 맞게 업데이트했습니다. - 감사합니다. – razlebe