2014-10-28 39 views
31

Tiêu đề thư viện chuẩn C++ có thể bao gồm nhau theo các cách không xác định, vì vậy các lập trình viên thường không nên phụ thuộc vào một tiêu đề bao gồm tiêu đề khác. Tuy nhiên, trong một vài trường hợp, tiêu đề được đảm bảo bao gồm một tiêu đề khác hoặc cung cấp một số chức năng nhất định có thể yêu cầu thêm một tiêu đề khác. Những trường hợp đó là gì?Tiêu đề nào trong thư viện chuẩn C++ được đảm bảo bao gồm một tiêu đề khác?

+3

Tại sao thông tin này hữu ích? Ví dụ: – Pradhan

+4

@Pradhan Thật hữu ích khi biết rằng nếu bạn đưa vào '' bạn không phải bao gồm '', hoặc '' nếu bạn chỉ cần 'std :: begin' /' std :: kết thúc'. –

+1

Ah, có ý nghĩa. Cảm ơn! – Pradhan

Trả lời

32

Câu trả lời này bỏ qua các tiêu đề C - cả hai tiêu đề <meow.h><cmeow>. Các tiêu đề thư viện C++ (tất cả các tài liệu tham khảo là để N4659):

<initializer_list> được đảm bảo để được bao gồm bởi:

<iostream> được đảm bảo để bao gồm <ios>, <streambuf>, <istream>, và <ostream> (§30.4.1 [iostream.syn]).

<ios> được đảm bảo bao gồm <iosfwd> (§30.5.1 [ios.syn]).

<bitset> được đảm bảo bao gồm <string><iosfwd> (§23.9.1 [bitset.syn]).

Chức năng miễn phí các mẫu std::begin, std::end, 14 C++ c-, r-cr- phiên bản, và C++ 17 chức năng miễn phí các mẫu std::size, std::emptystd::data danh nghĩa cư trú tại <iterator>, nhưng cũng có sẵn nếu có các tiêu đề sau đây được bao gồm: <array>, <deque>, <forward_list>, <list>, <map>, <regex>, <set>, <string>, <unordered_map>, <unordered_set>, và <vector> (§27.7 [iterator.range], §27.8 [iterator.container]).

Khi <string_view> được bao gồm, các *begin*end chức năng, và hai generic std::swap quá tải quy định tại [utility.swap] (swap(T&, T&)swap(T (&a)[N], T (&b)[N])) được đảm bảo có sẵn. Tuy nhiên, size/empty/data thì không. (§24.4.1 [string.view.synop]).

+0

@ShafikYaghmour Chỉ khác biệt sau khi so sánh N3337 và N4140 là thiếu 'std :: cbegin' vv trong C++ 11. Hầu hết điều này là trong tóm tắt cho các tiêu đề tương ứng. –

Các vấn đề liên quan