2016-08-04 15 views

Trả lời

11

std::move (và boost::move khi hỗ trợ C++ 0x được bật) chỉ là một diễn viên từ T& đến T&&. Nó không thực sự di chuyển bất cứ điều gì. Điều này có nghĩa là kiểu con trỏ cụ thể T&& phải được trình biên dịch hỗ trợ. GCC hỗ trợ tham chiếu giá trị r kể từ phiên bản 4.3, vì vậy phiên bản tăng cường sẽ ổn.

Tuy nhiên, có lý do nào bạn không thể sử dụng std::move từ #include <utility>?

http://en.cppreference.com/w/cpp/utility/move

Bạn chỉ cần phải chắc chắn để xác định -std=c++0x như một tùy chọn biên dịch để cho phép hạn chế c hỗ trợ ++ 11 mà gcc 4.4 có.

+3

Trong C++ 03 'boost :: move', nó không chỉ là một diễn viên **: đó là lý do tại sao nó hoạt động ở đó. "Boost.Move dựa trên các macro được mở rộng thành các tham chiếu rvalue thực trong các trình biên dịch C++ 0x và các lớp tham chiếu rvalue mô phỏng và các toán tử chuyển đổi trong các trình biên dịch C++ 03." Xem [Boost docs] (http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move/how_the_library_works.html) – nugae

+0

@nugae có, bạn hoàn toàn đúng. –

8

Có nó có thể

Boost.Move là gì?

Tham chiếu Rvalue là một tính năng chính của C++ 0x, cho phép di chuyển ngữ nghĩa cho giá trị C++. Tuy nhiên, chúng ta không cần các trình biên dịch C++ 0x để có được lợi thế của việc di chuyển semanatics. Boost.Move mô phỏng ngữ nghĩa di chuyển C++ 0x trong C++ 03 trình biên dịch và cho phép viết mã di động hoạt động tối ưu trong các trình biên dịch C++ 03 và C++ 0x.

Nguồn: http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move.html

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