2016-10-23 20 views
21

Tại sao std::io::copy yêu cầu cả đối số người đọc và người viết cần được chuyển thành tham chiếu có thể thay đổi?Tại sao io :: copy yêu cầu người đọc và người viết cho cả hai tham chiếu có thể thay đổi?

Tôi có thể hiểu tại sao người viết cần phải bị đột biến để chứa dữ liệu được ghi vào đó, thay đổi trạng thái nội bộ của nó.

Tuy nhiên, tại sao người đọc phải được gắn cờ làm tham chiếu có thể thay đổi? Nếu tôi chỉ đọc dữ liệu, thì tôi sẽ không cần tham chiếu đến một loại đã cho và không phải là một tham chiếu có thể thay đổi được không?

Trả lời

29

Bởi vì Read loại, nói chung, một lần: bằng cách đọc từ nó, bạn biến đổi nó.

Hãy xem xét đầu vào chuẩn: bạn chỉ có thể đọc từ đó một lần, vì vậy, điều gì đó phải thay đổi. Khi bạn đọc từ một socket, bạn gần như chắc chắn sẽ biến đổi một bộ đệm bên trong được sử dụng để giải thích sự khác nhau giữa các gói mạng mà bạn nhận được và lượng dữ liệu bạn muốn đọc tại bất kỳ thời điểm nào. Làm thế nào về đọc từ một Chain, được sử dụng để nối những thứ có thể đọc được với nhau; mà không có đột biến, nó không thể theo dõi cái nào nó được cho là đang đọc.

Chắc chắn, đó là thể để có một loại Read mà không cần truy cập có thể thay đổi để thực hiện một đọc, nhưng đó không phải phổ đúng, và bởi vì nó không phải là phổ biến đúng, Read đặc điểm đòi hỏi truy cập có thể thay đổi.

+0

Đó thực sự là giải thích rõ ràng về pha lê tại chỗ. Cảm ơn! –

+5

Ngay cả trên một 'Tệp', bạn đang cập nhật bù đắp đọc hiện tại. –

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