2015-07-06 11 views
7

Tất cả tài liệu tôi có thể tìm thấy nói rằng std::basic_istream<>::ignore(n) "chiết xuất và loại bỏ các ký tự", nhưng không rõ ràng về ý nghĩa của việc trích xuất này.Với std :: ifstream, có sự khác biệt nào giữa việc bỏ qua các ký tự và tìm kiếm không?

Cụ thể, có thể triển khai thực hiện tương đương với chỉ đơn giản là seekg trong tệp? Nếu vậy, thực hiện chính thống làm điều đó?

Nếu không, nếu các ký tự thực sự bị "đọc" trước khi bị vứt bỏ, có vẻ như ignore là lựa chọn không hợp lệ khi có sẵn một tệp hoặc chuỗi chuỗi (01.).

Trả lời

3

Có, có sự khác biệt.

Thậm chí nếu chúng ta chỉ coi quy tắc as-if, việc trích xuất ký tự có ảnh hưởng đến trạng thái luồng (xem xét các cờ trạng thái khác nhau) và chúng ta có thể nhìn thấy từ the libstdc++ implementation. người gọi.

Nếu có bất kỳ "tối ưu hóa" nào để bỏ qua toàn bộ ký tự thì hành vi có thể quan sát này sẽ khác.

Để áp dụng "tối ưu hóa" này, bạn nên tự mình thực hiện seekg, hãy cẩn thận để không tìm kiếm quá cuối luồng.

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