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?
Trả lời
Câu trả lời này bỏ qua các tiêu đề C - cả hai tiêu đề <meow.h>
và <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:
<utility>
(§23.2.1 [utility.syn])<string>
(§24.3.1 [string.syn])<array>
(§26.3.2 [array.syn])<deque>
(§26.3.3 [deque.syn])<forward_list>
(§26.3.4 [forward_list.syn])<list>
(§26.3.5 [list.syn])<vector>
(§26.3.6 [vector.syn])<map>
(§26.4.2 [associative.map.syn])<set>
(§26.4 .3 [associative.set.syn])<unordered_map>
(§26.5.2 [unord.map.syn])- .210 (§26.5.3 [unord.set.syn])
<queue>
(§26.6.2 [queue.syn])<stack>
(§26.6.3 [stack.syn])<algorithm>
(§28.2 [algorithms.syn])<random>
(§29.6.2 [rand.synopsis])<valarray>
(§29.7.1 [valarray.syn])<regex>
(§31.4 [re.syn])
<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>
và <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-
và cr-
phiên bản, và C++ 17 chức năng miễn phí các mẫu std::size
, std::empty
và std::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
và *end
chức năng, và hai generic std::swap
quá tải quy định tại [utility.swap] (swap(T&, T&)
và 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]).
@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. –
- 1. Tiêu đề thư viện chuẩn C++ có thể bao gồm tiêu đề C chuẩn không?
- 2. Việc triển khai C có thể bao gồm tiêu đề chuẩn khi bao gồm một tiêu đề khác không?
- 3. Bao gồm thư viện chuẩn C++
- 4. Có bao nhiêu tệp tiêu đề trong tiêu chuẩn C++?
- 5. Đâu là tiêu đề của thư viện chuẩn C++
- 6. Tiêu đề hình tròn C++ bao gồm
- 7. Thông tư C++ Tiêu đề Bao gồm
- 8. Makefile bao gồm tiêu đề
- 9. Bao gồm -Swift.h trong tiêu đề ô
- 10. AFNetworking bao gồm tiêu đề
- 11. C - cách bao gồm tiêu đề riêng được giữ trong thư mục riêng biệt
- 12. GCC không thể tìm thấy tệp tiêu đề trong thư viện được bao gồm
- 13. Bao gồm tiêu đề C++ 11 với Clang/LLVM
- 14. Bao gồm các tiêu đề C bên trong một chương trình C++
- 15. Bao gồm tiêu đề trong dự án Xcode 4.2.1
- 16. Bạn gọi một tiêu đề duy nhất có mục đích là bao gồm các tệp tiêu đề khác là gì?
- 17. Bao gồm một tập tin tiêu đề từ một thư mục khác
- 18. Eclipse CDT C/C++: Bao gồm tệp tiêu đề từ một dự án khác
- 19. sự khác biệt giữa các tệp tiêu đề c (.h) và tệp tiêu đề C++ (.hpp)
- 20. dễ dàng bao gồm tiêu đề từ phụ thuộc thư viện trong cmake
- 21. C++ tập tin tiêu đề bao gồm lẫn nhau
- 22. Sử dụng các tiêu đề thư viện chuẩn C++ khác nhau với trình biên dịch Intel
- 23. Tôi có cần khối "C" bên ngoài để bao gồm tiêu đề C chuẩn không?
- 24. C các thư viện phi tiêu chuẩn
- 25. Tại sao các tiêu đề C++ này được chỉ định bao gồm <initializer_list>?
- 26. Bao gồm tiêu đề từ khung tùy chỉnh trong XCode
- 27. Loại tệp tiêu đề nào không được bảo vệ chống lại sự bao gồm nhiều tệp?
- 28. bao gồm typedef bên trong một tiêu đề lớp
- 29. Chi phí bao gồm các tệp tiêu đề trong mục tiêu-C
- 30. Vấn đề với bao gồm bảo vệ
Tại sao thông tin này hữu ích? Ví dụ: – Pradhan
@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'. –
Ah, có ý nghĩa. Cảm ơn! – Pradhan