2012-11-25 2 views
13

pair를 사용하기 위해 특정 헤더 파일을 포함하지 않고 stl pair를 사용하여 코드를 작성하는 데 익숙합니다. 하지만 친구가 오늘 유틸리티 헤더를 사용해야 할 때마다 다른 컴파일러에서 문제가 발생할 것이라고 말했습니다. 이것이 사실인지 말해주십시오. 그리고 유틸리티 헤더를 사용하지 않고 코드를 작성할 수 있다면 유틸리티 헤더의 사용은 무엇입니까?pair stl의 헤더 파일

답변

19

프로그램에서 사용하는 모든 클래스에 대해 항상 헤더 파일을 포함해야합니다. 그렇지 않으면 일부 헤더가 관심있는 클래스를 내부적으로 사용한다는 사실에 달려 있지만 다른 컴파일러 나 버전에서는 변경 될 수 있습니다. 클래스 참조 (예 : cppreference.com - http://en.cppreference.com/w/cpp/utility/pair)를 읽고 포함 할 헤더 파일을 확인해야합니다. std::pair의 경우 #include <utility>을 추가해야합니다. 예를 들어 iostreamiomanip이 이미 포함되어 있고 setw 등의 조작기를 사용할 때 코드가 컴파일된다는 사실에 의존 할 수는 없습니다. 언어 사양을 참조하고 필수 헤더를 포함해야합니다.

8

요점은 다른 헤더를 포함하여 <utility> 헤더를 간접적으로 포함했을 수도 있다는 점입니다. 일반적으로 헤더가 C++ 구현의 다른 헤더에 포함되는 경우는 포함되지 않고 표준에 의해 위임됩니다. 따라서 <utility>을 포함 시키면 코드가 표준 호환 구현에서 이식 가능한지 확인합니다 (적어도이 특정 문제와 관련하여).

표준에서는 std::pair이 이라는 것을 지정하므로 std::pair을 사용할 때마다이 값을 포함해야합니다.

4

항상 사용하는 구성 요소를 정의하는 헤더를 포함해야합니다. 일부 표준 라이브러리는 내부적으로 사용하는 다른 선언을 포함하도록 구현되지만,이 라이브러리에는 전혀 의존 할 수 없습니다. 나는 표준 라이브러리가 선언문을 사용할 수있게 만들 필요가 없다는 것을 오류로 생각한다.

std::pair 클래스 템플릿은 <utility>에 의해 제공됩니다.