Tại sao định nghĩa của std :: chức năng <> :: operator() trong tiêu chuẩn C++ như sau:C++ 11 std :: chức năng và chuyển tiếp hoàn hảo
R operator()(ArgTypes...) const;
và không
R operator()(ArgTypes&&...) const;
?
Bạn có thể nghĩ rằng để chuyển tiếp thông số chính xác, chúng tôi cần & & và sau đó sử dụng std::forward<ArgTypes>...
trong phần chức năng khi chuyển tiếp cuộc gọi?
tôi một phần reimplemented std :: chức năng để kiểm tra điều này và tôi phát hiện ra rằng nếu tôi sử dụng & &, tôi nhận được "không thể ràng buộc 'xxx' vế trái để 'xxx & &" từ g ++ khi tôi cố gắng sau đó để vượt qua thông số theo giá trị cho toán tử(). Tôi nghĩ rằng tôi đã nắm bắt đủ các khái niệm rvalue/forwarding, nhưng tôi vẫn không thể mò mẫm điểm này. Tôi đang thiếu gì?
Cảm ơn, mọi thứ đã có ý nghĩa hoàn hảo ngay bây giờ. – airman
@Xeo, mã của bạn biên dịch chính xác ... http://ideone.com/7TyCB8 Không có lỗi tại f (i), bạn có thể giải thích ý của bạn bằng "// error" hay có lẽ tôi đang sử dụng trình biên dịch sai. Cảm ơn. –
@WillBradley: Đọc lại chú thích ở trên cùng của 'main': *** Giả sử *** rằng chữ ký' std :: function :: operator() 'đã thực sự là' R (Args && ...) '- điều này sẽ, với, nói, 'function ' tạo 'void (int &&)' cho toán tử '()', mà bây giờ sẽ chỉ chấp nhận các giá trị. –
Xeo