2012-03-09 38 views
11

Tham chiếu Rvalue và Di chuyển ngữ nghĩa là một tính năng chính của C++ 11 có thể tăng tốc đáng kể mã bằng cách giảm các bản sao không cần thiết. STL đã được cập nhật để sử dụng tính năng mới này khi sử dụng trình biên dịch C++ 11/0x (ví dụ: gcc 4.6)Thư viện Tăng cường nào lợi dụng Di chuyển ngữ nghĩa

Tăng 1,48 giới thiệu thư viện mới để mô phỏng ngữ nghĩa di chuyển trên trình biên dịch C++ 03 cũ hơn. Thư viện này hoạt động bằng cách giới thiệu các macro mở rộng tới các tham chiếu rvalue thực khi mã được biên dịch với các trình biên dịch C++ 11 hoặc các tham chiếu rvalue mô phỏng khi mã được biên dịch bằng các trình biên dịch C++ 03.

Ngoài số boost::container có bất kỳ thư viện tăng cường nào khác đã được cập nhật để tận dụng lợi thế của ngữ nghĩa di chuyển chưa?

Có lộ trình chi tiết khi/nếu ngữ nghĩa di chuyển sẽ được thêm vào thư viện tăng cường khác không?

boost::multi_index_container đã đề cập thêm ngữ nghĩa di chuyển trên Boost.MultiIndex Future work, kể từ khi được giới thiệu trong phiên bản 1.31.

+0

Note : tên "STL" không được dùng nữa và không rõ ràng. Sử dụng "Thư viện chuẩn C++" để thay thế. – Griwes

Trả lời

8

Như bạn đã nói trong câu hỏi, hãy tăng 1,48 giới thiệu boost::move, một thư viện mô phỏng ngữ nghĩa di chuyển với C++ 03. Điều này được phát triển bởi Ion Gaztanaga, người cũng (chủ yếu) đã viết và hiện đang duy trì boost::intrusiveboost::container.

Cả hai hỗ trợ di chuyển ngữ nghĩa xâm nhập và container - trong thực tế boost::intrusive có để hỗ trợ ngữ nghĩa di chuyển cho boost::container đến, bởi vì boost::container về cơ bản là một loạt các container không xâm nhập được thực hiện bằng cách gói boost::intrusive các đối tác của họ. Dường như với tôi như xâm nhập/container là động lực để viết boost::move, do đó, nó không đáng ngạc nhiên rằng họ có một khởi đầu trên phần còn lại của tăng. Tuy nhiên, nhập khẩu cần lưu ý ở đây là không có lộ trình tăng cường hoặc ủy ban tăng cường chỉ là tập hợp các thư viện chia sẻ phân phối, trang web và quy trình kiểm tra chất lượng/đánh giá. Bạn phải xem xét từng thư viện như một dự án riêng biệt, nó sẽ chỉ được cập nhật nếu và khi các tác giả/người duy trì quan tâm đến việc thực hiện công việc (hoặc tất nhiên, khi bạn gửi cho họ một bản vá!).

The boost 1.48/1.49/1.50/1.51/1.52 release notes là nơi tốt nhất để tìm kiếm câu trả lời rắn:

  • Boost.Interprocess có hỗ trợ từ 1,45, cả C++ 11 và C++ 03. Trước 1.48, điều này chứa mã đã trở thành boost.move.
  • Boost.Asio có hỗ trợ từ 1,47; no emulation trong C++ 03
  • Boost.Intrusive được sự ủng hộ qua boost.move trong 1,48 (C++ 11, C++ 03)
  • Boost.Container là mới trong 1,48 với sự hỗ trợ thông qua tăng .move (C++ 11, C++ 03)
  • Boost.Icl được sự ủng hộ qua boost.move trong 1.49 (C++ 11, C++ 03)
  • Boost.Unordered được sự ủng hộ thông qua boost.move trong 1,49 (C++ 11, với #define để kích hoạt mô phỏng trong C++ 03)
  • Tăng tốc.Chủ đề hỗ trợ C++ 03 thi đua w/boost.move kể từ 1.50, phiên bản cũ có C++ hỗ trợ 11-chỉ
  • Boost.Function thêm C++ 11 chỉ hỗ trợ trong 1,52
Các vấn đề liên quan