2014-10-29 14 views
5

Tại sao trong C++ trình bày hai chức năng với các tên khác nhau refcref? Tại sao không chỉ có chức năng ref bị quá tải? Có một số lý do ngữ nghĩa quan trọng?Chức năng ref và cref STL

+1

Nó tương tự như 'begin' /' cbegin'. – Jarod42

Trả lời

10

Vì đôi khi bạn muốn quấn một tham chiếu const vào đối tượng không phải const. Trong trường hợp này, std::cref cho phép bạn viết

std::cref(x) 

thay vì

std::ref(static_cast<const T&>(x)) 

(nơi T của khóa học là loại x).

+0

Vì vậy, tôi có thể sử dụng chức năng 'ref' độc quyền trong mã" chung ", phải không? Là 'ref' cho' const' đối số một anyways quá tải khả thi? – Orient

+1

@Orient: Tôi nghĩ rằng thường 'std :: ref' /' std :: cref' được sử dụng nhiều hơn ở phía bên kia của khấu trừ đối số, cụ thể là trên trang web cuộc gọi. Hàm của bạn nên chuyên về một 'std :: reference_wrapper ' và lấy nó từ đó, một cách tổng quát. –

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