Nó đã đi đến sự chú ý của tôi rằng std::forward
là vô ích trong bối cảnh này:Tại sao std :: phía trước vô dụng trong bối cảnh này
void consumeObject(std::unique_ptr<Object>&& robj) {
myvector.emplace_back(std::forward<std::unique_ptr<Object>>(robj));
}
Tại sao vậy? Tôi nghĩ rằng khi tham chiếu rvalue liên kết với tham số hàm (nghĩa là tôi có thể tham chiếu nó theo tên) nó sẽ trở thành một giá trị trong phạm vi đó và để được chuyển tiếp cần phải được đúc thành tham chiếu rvalue (như trong chuyển tiếp hoàn hảo)).
Tại sao nó sai/vô ích?
"Cast tham chiếu rvalue "không phải là" chuyển tiếp hoàn hảo ". Đó là * di chuyển *. –
Chuyển tiếp hoàn hảo là sự kết hợp của quy tắc khấu trừ đối số mẫu đặc biệt và thu gọn tham chiếu. – Simple
Ngoài ra: chuyển tiếp hoàn hảo liên quan đến "tham chiếu phổ quát" và bạn không có tham chiếu chung; bạn có một tham chiếu rvalue. 'std :: move' là đủ ở đây. – Simple