이것은 동일한 주제에 대해 쓴 다른 답변의 수정 된 버전입니다. 지금 버전 3까지.
코드에 count
이라는 변수가 있고 using namespace std;
인 변수가있는 경우 중요한 의미는 이름 충돌입니다. 이는 의미가 모호합니다. 그것은 단지 count
이 아닙니다. reverse
및 equal
도 포함되며 모든 공통 식별자입니다. 예를 들어,이 컴파일 오류가 발생합니다 : 컴파일러에 대한 모든 문제를 무시하고
는
#include <algorithm>
using namespace std;
int count;
int main(int argc, char* argv[]){
count = 1;
}
, 그것은 또한 당신의 코드를 읽어 오는 사람을위한 문제입니다. 그 여분의 5 자 다음 사람이 당신이 string
을 그것은 또한 쓸 때 당신이 std::string
또는 mylib::string
을 의미하는지 다른 모든 라인을 파일의 상단을 확인하지 않고도 의미를 정확하게 코드의 과학적 이해를 유지하는지 확인 헤더 파일에 using namspace xyz
을 두지 말아야한다는 점에 유의해야합니다. 헤더 파일을 포함하는 모든 파일에 전파 할 수 있기 때문에 해당 네임 스페이스를 사용하지 않더라도 마찬가지입니다. 또 다른 문제는 std 네임 스페이스가 임포트 된 것이 확실하지 않다는 것입니다. 따라서 관리자 (또는 3 개월 째)가 동일한 컴파일 유닛에 포함 된 모호한 std 함수와 동일한 이름의 변수를 추가하고 그런 다음 컴파일 오류의 원인을 찾으려고 한 시간을 소비합니다.
은 스왑의 전문 버전이있는 경우, 컴파일러는 그것을 사용으로
using std::swap
를 사용하는 것은 매우 유용 대부분의 경우, (유효 C++에서) 그렇지 않으면 std::swap
다시 떨어질 것이다 . std::swap
으로 전화를 걸면 항상 기본 버전을 사용합니다. 기본 버전은 특수 버전을 호출하지 않습니다 (존재하는 경우에도 마찬가지 임).
코드 예를 들어 pimpl idiom을 사용하십시오. 기본 복사가 실제 구현의 모든 데이터를 복사 할 수있는 곳에서는 어디에서나 포인터를 바꿔야합니다. 스페셜 스왑을 사용하면 막대한 양의 실행 시간을 절약 할 수 있으며 잘 디자인 된 라이브러리가 특수화해야합니다.요약
,
다른 모든 의견입니다.
많은 다른 많은 사람들 사이에 http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c가 있습니다. –
네가 맞아! 내가 검색했을 때 왜 그걸 찾지 않았 니? 죄송합니다 – Mawg