2014-10-28 3 views
31

C++ 표준 라이브러리 헤더는 지정되지 않은 방식으로 서로를 포함 할 수 있으므로 일반적으로 프로그래머는 다른 헤더를 포함하여 하나의 헤더에 의존하면 안됩니다. 그러나 어떤 경우에는 헤더가 다른 헤더를 포함하거나 다른 헤더를 포함해야하는 특정 기능을 사용할 수 있습니다. 그 사건들은 무엇입니까?C++ 표준 라이브러리의 어떤 헤더에 다른 헤더를 포함시킬 수 있습니까?

+3

이 정보가 유용한 이유는 무엇입니까? 그것은 @Pradhan – Pradhan

+4

당신이 포함 된 경우'은'당신'', 또는''당신은 그냥 필요하면'표준 : begin' /'표준을 포함 ​​할 필요가 없습니다, 예를 들어, 알고 유용 :: 끝 '. –

+1

아, 말이 되네. 감사! – Pradhan

답변

32

이 답변은 C 헤더 (<meow.h><cmeow> 것)를 무시합니다. 은 C++ 라이브러리 헤더 (모든 참조는 N4659에 있습니다) :

<initializer_list>

에 의해 포함되는 보장 :

<iostream><ios>, <streambuf>, <istream><ostream> (§30.4.1 [iostream.syn])를 포함하도록 보장한다.

<ios>에는 <iosfwd> (§30.5.1 [ios.syn])이 포함됩니다.

<bitset><string><iosfwd> (§23.9.1 [bitset.syn])을 포함하도록 보장됩니다.

프리 기능은 명목상 <iterator>에 존재하지만, 어느 경우도 가능 std::begin, std::end은 C++ 14 c-, r-cr- 버전 및 C++ 17 무료 기능 템플릿 std::size, std::emptystd::data 템플리트 다음의 헤더가 포함되어 <array>, <deque>, <forward_list>, <list>, <map>, <regex>, <set>, <string>, <unordered_map>, <unordered_set><vector> (§27.7 [iterator.range], §27.8 [iterator.container]). <string_view> 포함되면

*begin*end 및 함수 및 [utility.swap] (swap(T&, T&)swap(T (&a)[N], T (&b)[N]))에 정의 된 일반적인 두 std::swap 과부하가 가능하도록 보장된다. 그러나 size/empty/data은 그렇지 않습니다. (§24.4.1 [string.view.synop]).

+0

@ShafikYaghmour N3337과 N4140을 비교 한 후에 만 ​​차이점은 C++ 11에서'std :: cbegin' 등이 없다는 것입니다. 이것의 대부분은 각 머리말에 대한 개요에 있습니다. –

관련 문제