2010-02-09 35 views

Trả lời

1

cảm ơn vì tất cả những người đã trả lời tôi: tôi bây giờ thử nghiệm một số mã tùy thuộc vào những gì tôi đã được trả lời và đã đưa ra bản tóm tắt này:

sử dụng ofstream: ios :: ra là mặc định thậm chí nếu không có gì được chỉ định, nhưng nếu bạn chỉ sử dụng ios :: in with ofstream, không có lỗi biên dịch (trừ khi bạn sử dụng read() hoặc >> hoặc một số đối tượng ifstream) nhưng không có tệp nào được ghi.

sử dụng ifstream: ios :: in là mặc định ngay cả khi không có gì được xác định, nhưng nếu bạn chỉ sử dụng ios :: ra với ifstream, không có lỗi biên dịch (trừ khi bạn sử dụng write() hoặc < < hoặc một số đối tượng ofstream) nhưng bạn không thể đọc bất kỳ thông tin nào từ tệp.

sử dụng fstream: không có giá trị mặc định, bạn phải xác định rõ bạn sẽ làm gì. Nếu không, không có lỗi biên dịch nhưng bạn không nhận được những gì bạn muốn đơn giản.

đối với câu hỏi gốc, cả hai đều hoạt động giống nhau!

5

Đối với một dòng, ios::out là giá trị mặc định, do đó không có sự khác biệt. Tôi tin rằng thời gian duy nhất xác định ios :: ra làm cho một sự khác biệt là nếu bạn sử dụng một fstream, có thể được mở để đọc hoặc viết, hoặc cả hai.

+0

no nếu bạn sử dụng kênh fstream, bạn có thể viết ios :: out cũng như ios :: và bạn vẫn có thể viết và đọc từ tệp .. vì vậy không phải lúc nào nó cũng viết như vậy không viết ios :: out? –

+0

@Imengineer: Tôi phải kiểm tra để chắc chắn, nhưng nếu bộ nhớ phục vụ một fstream được mở cho cả đầu vào và đầu ra theo mặc định, nhưng nếu bạn chỉ định ios :: out, nó chỉ được mở cho đầu ra, và nếu bạn chỉ định ios :: in, nó chỉ được mở cho đầu vào. Đó là đi từ bộ nhớ mặc dù, để nó chắc chắn không được bảo đảm. –

2

Trong hầu hết các trường hợp, tôi mong đợi sẽ không có sự khác biệt, mặc dù có vẻ như điều này về mặt kỹ thuật có thể được thực hiện cụ thể.

Khi triển khai thực hiện (gcc 3.4.3) mở cho dòng sử dụng chế độ ios ::: out trong cuộc gọi ofstream-> open() bất kể những gì được chỉ định thông qua hàm tạo nên hoàn toàn không bắt buộc. Nếu sử dụng fstream, đây không phải là trường hợp và sẽ cần được xác định rõ ràng.

2

Kiểm tra tiêu chuẩn, phần 27.8.1.3 thảo luận về các công cụ sửa đổi ios khác nhau (như ios::inios::out) và ánh xạ chúng với thông số C fopen(). Theo tiêu chuẩn, nếu không có bộ điều chỉnh nào được chỉ định trên một tệp đang mở, thì mở không thành công.

Trong 27.8.1.9, chúng tôi thấy rằng ofstream hoạt động như thế, nhưng với ios::out được chỉ định tự động. Do đó, câu trả lời cho câu hỏi ban đầu là cả hai sẽ hoạt động chính xác như nhau.

Tôi không biết tại sao mọi người đang tìm kiếm phần mở đó với fstream mà không có ios::in hoặc ios::out, nhưng việc đọc Tiêu chuẩn của tôi cho biết rằng nó không hoạt động. Tôi muốn được quan tâm đến những bài đọc của người khác về 27.8.1.3.

+0

nơi để tìm tiêu chuẩn này ?? –

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