2016-06-06 23 views
15

Như có thể thấy từ https://stackoverflow.com/a/26614984/481267 các tiêu đề sau được đảm bảo theo tiêu chuẩn để #include <initializer_list>:Tại sao các tiêu đề C++ này được chỉ định bao gồm <initializer_list>?

  • Mọi thứ trong [container]
  • <utility>
  • <string>
  • <algorithm>
  • <random>
  • <valarray>
  • <regex>

Hầu hết các tiêu đề tuyên bố ít nhất một chức năng mà phải mất một lập luận std::initializer_list<E>, vì vậy nó có ý nghĩa. Tuy nhiên,

  • <array>, <stack>, và <queue> không có chức năng như vậy, mặc dù có lẽ nó làm cho tinh thần để đối xử với tất cả các container thống nhất ở đây.
  • <utility> không có chức năng nào như vậy.
  • <iterator> không có chức năng với đối số initializer_list (rbegin, rend) nhưng không được chỉ định để bao gồm <initializer_list>.

Lý do cơ bản đằng sau những ngoại lệ này là gì?

+0

Tôi nghĩ rằng việc sử dụng đồng bộ khởi tạo yêu cầu phải có ''. Xem các ý kiến ​​của câu hỏi này [ở đây] (http://stackoverflow.com/q/33704978/3093378). – vsoftco

+1

Bao gồm trong ' 'ngày trở về N2672. Phần còn lại được thực hiện bởi N2930. 'Rbegin' /' rend' là những bổ sung trễ. –

+0

@vsoftco Chỉ khi bạn sử dụng loại rõ ràng hoặc ngầm. –

Trả lời

1

Dường như không có lý do rõ ràng, chỉ cần một số đề xuất bổ sung cho tiêu chuẩn đã được thực hiện và các đề xuất đó đã được chấp nhận.

Vào cuối của tài liệu N2672 Initializer List proposed wording nó chỉ nói:

Trong 20,2 linh kiện Utility [tiện ích] đoạn 1:

: Mục này chứa một số chức năng và lớp mẫu cơ bản được sử dụng trong suốt phần còn lại của thư viện.

Tiêu đề <utility> tóm tắt

 #include<initializer_list> 
     namespace std { 

Vì vậy, các tác giả của bài báo thấy initializer_list như một tiện ích, và vì vậy nó phải được bao gồm trong <utility> tiêu đề. Và do đó nó được.

Bài báo không đề xuất bất kỳ thay đổi nào đối với tiêu đề <iterator>, vì vậy không có kết quả nào được thực hiện.

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