2011-01-04 2 views

답변

12

boost.
std::tr1. (기술 보고서 ​​1)

그러나 using namespace std;은 좋은 생각이 아니며, 특히 헤더 파일에는 적합하지 않습니다. 훨씬 더 명확한 코드와 적은 충돌을 위해 사용할 때마다 5 개의 추가 문자가 사용됩니다.

5

C++ 표준 라이브러리의 모든 내용은 std 네임 스페이스 (또는 std 아래의 중첩 네임 스페이스)에 있습니다.

다른 라이브러리는 물론 다른 네임 스페이스를 사용합니다. 그들이 사용하고있는 네임 스페이스를 결정하기 위해 사용하고있는 다른 라이브러리의 문서를 참조하고 싶을 것이다.

즉, 지시어를 사용하는 것은 일반적으로 나쁜 생각입니다. 네임 스페이스의 개별 이름을 사용하는 선언을 사용하는 것이 훨씬 좋습니다. 이는 std 네임 스페이스에서 특히 중요합니다. std 네임 스페이스에는 일반적으로 많이 사용되는 이름이 많이 있으며, 자신의 함수 나 클래스를 참조하고 우연히 표준 라이브러리 함수 또는 클래스를 참조하려고하는 어려운 문제를 해결하기 쉽습니다. 예를 들어,이 나쁜 :

using namespace std; 
cout << "Hello world" << endl; 

이 더 나은 것입니다 : 당신은 프로그램 전반에 걸쳐 정규화 된 이름을 사용하는 경우

제 생각에는
using std::cout; 
using std::endl; 
cout << "Hello world" << endl; 

, 코드는 일반적으로 청소기입니다; 이것은 명확 곳 엔티티에서 오는하게 적은 실수의 여지 잎 :.

std::cout << "Hello world" << std::endl; 

(물론이 규칙의 모든 예외가 있습니다 std::bind를 사용하는 경우 예를 들어,이 std::placeholders::_1를 사용하는 구타이고를 그 친구. 그냥 다음 using std::placeholders;를 사용하는 코드를 읽어 훨씬 쉽게 및 _1, _2 등을 사용하여 지시하지 네임 스페이스 범위에서하지만, 함수의 내부에 있어야한다을 말한다.)

+0

마지막 코멘트를 무시하십시오.(Bill,'namespace po = boost :: program_options'가 아니라'namespace po = boost :: program_options' 사용) –

0

이것은을위한 공간입니다 C++ 표준 라이브러리 AFAIK 이것은 "out-of-the-box"를 가지고있는 유일한 네임 스페이스입니다. 다른 모든 것들은 자신을 정의하거나 다른 라이브러리에서 가져와야합니다.

0

C++ 표준 라이브러리의 모든 파일은 std 네임 스페이스 내의 모든 엔티티를 선언합니다. 타사 라이브러리 (예 : boost)를 사용하거나 자신의 네임 스페이스를 정의하는 경우에만 다른 네임 스페이스가 나타납니다.

2

아무도 std::rel_ops 네임 스페이스를 언급 한 것을 놀라게합니다. operator!=, operator>, operator<=operator>=을 정의합니다.

지시어 또는 선언문을 사용하여 범위에 포함시킬 수 있으며 유형에 operator<operator==을 정의 할 수 있습니다. std::rel_ops에서 제공하는 연산자는이 두 가지 측면에서 작동합니다.