2016-04-18 15 views
8

Boost cung cấp hai hiện thực khác nhau của string_view, đó sẽ là một phần của C++ 17:Sự khác nhau giữa tăng :: string_ref và đẩy mạnh :: string_view

  • boost::string_ref trong utility/string_ref.hpp
  • boost::string_view trong core/string_view.hpp

Có bất kỳ sự khác biệt đáng kể nào giữa chúng không? Mà nên được ưa thích về phía trước?

Lưu ý: Tôi nhận thấy trong Tăng 1.61, tăng :: nhật ký đã không dùng nữa string_ref có lợi cho string_view; có lẽ đó là một chỉ số? (http://www.boost.org/users/history/version_1_61_0.html)

Trả lời

11

Funnily đủ đúng bây giờ tôi đang ở hội nghị ACCU với Marshall Clow (lực lượng đằng sau string_view et al trên ủy ban) và tôi đã khá nghĩa đen về để hỏi anh ta tại quầy bar trước ngày hôm nay trước khi tôi được gọi đi về quan điểm của mình trên string_view so với Bjarn Thư viện hỗ trợ hướng dẫn của e (GSL) gsl::span<T> là một điều rất giống nhau (gsl-lite là việc triển khai yêu thích cá nhân của GSL vì nó tương thích với 03, nhưng có nhiều thứ khác). Tôi đã nghe nói rằng họ đã được thống nhất thành một thực hiện duy nhất cho tiêu chuẩn hóa, và hướng gsl::span<T> là tương lai, nhưng tôi sẽ báo cáo lại từ miệng ngựa nếu tôi sai về điều đó. Hiện tại, giả định hướng gsl::span<T> là tương lai hiện tại và Boost sẽ được cập nhật để sớm có một cái gì đó tương tự, ngay cả khi using string_view = gsl::span<char> về cơ bản là string_view.

Chỉnh sửa: Tôi vừa nói chuyện với Marshall ở tầng dưới. Ông nói với tôi rằng string_view, theo thực hiện trong Tăng cường, chắc chắn là trong C++ 17. array_view không phải là, cũng không phải là bất cứ điều gì lịch sử xung quanh string_view cho bây giờ.

GSL string_span là một thực thể riêng biệt không được dự kiến ​​nhập vào C++ 17, cũng không có kế hoạch hiện tại để thống nhất các triển khai khi chúng giải quyết các trường hợp sử dụng khác nhau, cụ thể là string_view luôn là dạng xem liên tục của mảng ký tự được vay, trong khi string_span được mong đợi là một khung nhìn có khả năng sửa đổi của mảng ký tự được mượn với các sử dụng tiềm năng làm nguồn để xây dựng chuỗi mới, vì vậy string_span có lẽ cuối cùng trở thành sự tổng quát của string_view trong một số tiêu chuẩn C++ trong tương lai.

+1

FYI cập nhật cuối cùng từ ủy ban về string_view, array_view và span là vào tháng 2 và được trình bày chi tiết tại http://stackoverflow.com/a/36207785/805579 –

4

Theo this email from the boost mailing list, tăng :: string_ref sẽ không được sử dụng trong tương lai và đang được thay thế bằng string_view trong các thư viện tăng khác.

boost :: string_view có những ưu điểm sau:

  • Better khớp với những gì các ủy ban tiêu chuẩn được làm cho C++ 17
  • đã hỗ trợ constexpr CÁCH hơn
+2

"Tốt hơn phù hợp với những gì mà ủy ban tiêu chuẩn đang làm cho C++ 17" - điều gì, cụ thể, điều đó có nghĩa là (trong sự khác biệt để tăng :: string_ref)? – sehe

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