Google 표준을 읽으면 using namespace foo;
어디에서나 지시문을 사용할 수 없습니다 . 이 지시어는 네임 스페이스에 선언 된 모든 것을 가져오고 충돌과 예기치 않은 동작의 일반적인 원인입니다. 다른 사람들은 매우 일반적인 것을 인용했습니다 : 당신은 어딘가에 자신의 max 또는 min 메소드를 가지고 있으며 누군가가 당신의 메소드에 헤더를 포함하는 src 파일에서 충돌합니다.using namespace std;
어떤 곳에서는 사용 선언을 할 수 있습니다. using ::foo::bar;
사람들은 많은 타이핑을 저장하지 않기 때문에 코드에 지시문을 사용하는 것을 좋아하지만 위험이 따릅니다. cout 문이 많은 파일이 있으면 std :: cout을 100 번 입력하고 싶지는 않지만 :: std :: cout을 사용하여 간단히 말할 수 있습니다. 나는 이것을 변수 선언처럼 취급한다 : 그것들을 필요한 곳으로 범위를 정한다. 10의 파일에서 하나의 함수가 출력을 작성해야하는 경우 상단에 cout way를 선언하지 말고 실제 출력을 수행하는 함수에 넣으십시오.
#include <ostream>
//using namespace std; // NO!
//using ::std::cout; // less bad than using namespace, but I prefer to scope it
int main(int argc, char** argv)
{
int rc = do_some_stuff(argc, argv);
using ::std::endl;
if (rc) { // print the success report
using ::std::cout;
cout << "The test run completed. The return code was " << rc << '.' << endl;
} else {
using ::std::cerr;
cerr << "Unable to complete the test run." << endl;
}
return 0 == rc;
}
출력을하는 몇 줄만 있으면 약간 극단적이지만 아이디어를 얻습니다.
입력을 최소화하기 위해 별명 또는 typedef를 사용할 수 있습니다. std :: find를 찾을 수는 없습니다.하지만 수십 개의 모듈이있는 거대한 소스 세트가 있으며 때로는 코드를 작성해야합니다 console_gui::command_window::append("text")
. 잠시 후에 지루해지고 많은 긴 줄이 생깁니다. 나는 모두 같은 것을 위해
typedef console_gui::command_window cw;
cw::append("text");
별칭이 로컬 범위에서 수행되고 코드를 읽을 수 있도록 충분한 컨텍스트를 유지하는 한.