T & & Trong C++ 11 là tham chiếu rValue. Chúng hoạt động giống như tham chiếu lvalue từ C++ 98,03. Mục tiêu của họ - là một ứng viên di chuyển. Trong C++ 98, việc xây dựng như vậy có thể xuất hiện trong refrence collapsing
std :: move - biểu thức lượt trong rvalue. Nó có thể được gọi là rvalue_cast, nhưng từ khóa đó không tồn tại.
Trích xuất rõ ràng để nhập T & & có thể về nguyên tắc. Bất standart tốn một số tiền, nhưng trong dự thảo của ISO/IEC 14882:2011 Có tồn tại thông tin như vậy
5.2.9 Static đúc
8)
Các giá trị trái-to-rvalue (4.1), mảng chuyển đổi con trỏ (4.2) và chuyển đổi chức năng thành con trỏ (4.3) được áp dụng cho toán hạng ....
Từ quan điểm thực tế, thuận tiện hơn khi sử dụng lệnh std :: move. Hãy tưởng tượng ví dụ như:
#include <stdio.h>
#include <utility>
class A
{
public:
A() {printf ("A()" "\n");}
A (const A &) {printf ("A (&)" "\n");}
A (A &&) {printf ("A (&&)" "\n");}
A (const A &&) {printf ("A (const &&)" "\n");}
~ A() {printf ("~ A()" "\n");}
};
int main()
{
const A obj;
A obj2 (std::move (obj)); // 1-st approach
A obj3 (static_cast <const A&&> (obj)); // 2-nd approach
}
Đối với tôi 1-st cách tiếp cận là
- thuận tiện hơn (bạn nên thực hiện static_cast để const Một & &, hoặc để Một & &?)
- một cách rõ ràng hơn (tôi có thể sử dụng tìm kiếm trong soạn thảo văn bản để tìm std :: di chuyển trong dự án)
- ít dễ bị lỗi khi phát triển phần mềm viết mã
Họ là tương đương nhưng thái này là ít bị lỗi. – user1353535