Tôi đoán là không, nhưng tôi muốn xác nhận. Có sử dụng nào cho const Foo&&
, trong đó Foo
là loại lớp không?Tham chiếu rvalue cho const có sử dụng không?
Trả lời
Đôi khi chúng hữu ích. Dự thảo C++ 0x bản thân sử dụng chúng ở một vài nơi, ví dụ:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Hai quá tải trên đảm bảo rằng các ref(T&)
và cref(const T&)
các chức năng khác không liên kết với rvalues (mà nếu không sẽ có thể).
Cập nhật
Tôi vừa mới kiểm tra các tiêu chuẩn chính thức N3290, mà tiếc là không công bố rộng rãi, và nó có trong các đối tượng 20,8 Function [function.objects]/p2:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Sau đó, tôi đã kiểm tra bản nháp sau C++ 11 gần đây nhất, có sẵn công khai, N3485 và trong 20.8 đối tượng chức năng [function.objects]/p2 nó vẫn nói:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Nhìn vào [cppreference] (http://en.cppreference.com/w/cpp/utility/functional/ref) có vẻ như đây không phải là trường hợp nữa. Bất kỳ ý tưởng tại sao? Bất kỳ nơi nào khác 'const T && 'được sử dụng? – Pubby
Thực ra, cppreference có thể không hiển thị các chức năng đã xóa. Chưa kiểm tra tiêu chuẩn. – Pubby
@Pubby cppreference chắc chắn hiển thị các chức năng đã xóa, những chức năng này bị bỏ qua do nhầm lẫn. – Cubbi
Chúng được cho phép và thậm chí chức năng được xếp hạng dựa trên const
, nhưng vì bạn không thể di chuyển từ đối tượng const được giới thiệu bởi const Foo&&
, chúng không hữu ích.
Chính xác thì ý của bạn là gì "xếp hạng" nhận xét? Một cái gì đó để làm với độ phân giải quá tải, tôi đoán? – fredoverflow
Tại sao bạn không thể di chuyển từ một const rvalue-ref, nếu kiểu đã cho có một ctor di chuyển lấy một giá trị const rvalue-ref? –
@FredOverflow, xếp hạng quá tải là: 'const T &, T &, const T &&, T &&' –
Tôi không thể nghĩ ra một tình huống mà điều này sẽ có ích trực tiếp, nhưng nó có thể được sử dụng gián tiếp:
template<class T>
void f(T const &x) {
cout << "lvalue";
}
template<class T>
void f(T &&x) {
cout << "rvalue";
}
template<class T>
void g(T &x) {
f(T());
}
template<class T>
void h(T const &x) {
g(x);
}
T trong g là T const, do đó f 'sx là một T const & &.
Có khả năng kết quả này trong một lỗi comile trong f (khi nó cố gắng để di chuyển hoặc sử dụng các đối tượng), nhưng f có thể mất một rvalue-ref để nó không thể được gọi vào lvalues, mà không sửa đổi rvalue (như trong ví dụ quá đơn giản ở trên).
- 1. Một nhà xây dựng di chuyển có tham chiếu const hoặc tham chiếu rvalue không const?
- 2. Vượt qua tham chiếu, tham chiếu liên tục, tham chiếu rvalue, hoặc tham chiếu rvalue không đổi?
- 3. const tham chiếu ràng buộc với một rvalue
- 4. Tham chiếu rvalue có cho phép chuyển đổi ngầm không?
- 5. rvalue hoặc lvalue (const)
- 6. Sử dụng tham chiếu Rvalue trong danh sách khởi tạo
- 7. Quan trọng nhất const & rvalue refs
- 8. Khởi tạo chữ cho tham chiếu const
- 9. chuyển đổi ngầm định: tham chiếu const vs tham chiếu không const vs phi tham khảo
- 10. Tham chiếu rvalue cho loại chức năng là gì?
- 11. Có hiệu quả hợp lý để chèn vào tham chiếu rvalue cho luồng không?
- 12. tham số tham chiếu const
- 13. Làm thế nào để tạo tham số tham chiếu rvalue mẫu CHỈ liên kết với tham chiếu rvalue?
- 14. const tham chiếu đến đối tượng không const
- 15. Lý do đằng sau việc sử dụng lại "&&" - mã thông báo cho tham chiếu rvalue?
- 16. Một lỗi VS2010? Cho phép tham chiếu không ràng buộc liên quan đến rvalue KHÔNG CÓ SỰ BÁO CÁO?
- 17. Tham chiếu C++ rvalue và di chuyển ngữ nghĩa
- 18. C++ tham khảo rvalue và const vòng loại
- 19. Trả lại bằng tham chiếu rvalue hiệu quả hơn?
- 20. Tham số được chuyển bởi tham chiếu const được trả về bởi tham chiếu const
- 21. thay đổi tham chiếu của const std :: tham chiếu chuỗi
- 22. Ngăn chặn biểu mẫu ràng buộc để rvalue tham chiếu
- 23. C++ chức năng: pass luận const không đến tham số tham chiếu const
- 24. Tham chiếu Const đến tạm thời
- 25. rvalue-tham chiếu đến mảng: nó có thực sự xảy ra không?
- 26. Loại tham chiếu rvalue được đặt tên là gì?
- 27. C++ truyền qua tham chiếu const
- 28. Tại sao toán tử = trả về tham chiếu không const tham chiếu
- 29. Bind tạm thời để tham chiếu không const
- 30. std :: remove_const với tham chiếu const
Trong video này, STL nói 'const && 'rất quan trọng, mặc dù anh ấy không nói tại sao: https://www.youtube.com/watch?v=JhgWFYfdIho#t=54m20s –