2012-09-03 35 views
18

Điểm của số std::ios_base::ate (ngoài số std::ios_base::app, ví dụ) và std::ios_base::trunc (ví dụ: std::ios_base::out)?std :: ios_base :: ate và std :: ios_base :: trunc

Và tôi có nên viết std::ios_base::smth thay vì std::ios::smth không?

+1

'std :: ios_base :: in' và' std :: ios :: in' phải là giống hệt, tùy thuộc vào bạn. – oldrinb

+0

@veer có họ là, cũng như bất kỳ :: ios_base :: hậu duệ :: trong :) – Geoffroy

Trả lời

16

std :: ios_base :: ăn đặt con trỏ vào cuối của văn bản trong khi std :: ios_base_app gắn thêm văn bản (với một thao tác ghi) ở cuối, mặc dù bạn vẫn có thể đọc từ đầu :)

std :: ios_base :: trunc cắt ngắn tập tin để nó được làm rỗng, trong khi std :: ios_base :: chỉ cần chỉ định bạn muốn ghi vào luồng.

Tôi hiện không thể báo giá chuẩn (trên máy tính bảng và Acrobat Reader của tôi sẽ không cho phép sao chép) nhưng từ đoạn 27.4.2.1.4 từ ISO 14882: 1998 thông tin bạn có thể thấy trên liên kết gần như chính xác : http://cplusplus.com/reference/iostream/ios_base/openmode/

tóm lại:

std::ios_base::app = append 

Nối vào cuối dòng bằng cách "tìm kiếm [ing] để kết thúc trước khi mỗi ghi"

std::ios_base::ate = At The End 

mở và tìm kiếm immed iately vào cuối sau khi mở cửa

std::ios_base::binary = binary 

Thực hiện thao tác trong hệ nhị phân như trái ngược với văn bản

std::ios_base::in = input 

mở trong chế độ đọc

std::ios_base::out = output 

mở trong chế độ ghi

std::ios_base::trunc = truncate 

Cắt bớt luồng khi mở ing.

Những giá trị này chỉ là lá cờ, vì vậy bạn có thể mở một dòng ở chế độ đọc/ghi nhị phân ở cuối với:

std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary 

Liên quan đến cách sử dụng những giá trị, nó là như bạn muốn. Chúng được khai báo là các trường tĩnh công khai trong lớp std::ios_base (xem 27.4.2) do đó có thể truy cập chúng bằng cách sử dụng std::ios::ate hoặc thậm chí là một cái gì đó như cout.binary!


Những điểm nơi bạn phải chú ý là std::ios_base::ate KHÔNG bao hàm std::ios_base::app cũng không std::ios_base::out ngụ ý std::ios_base::trunc. Mỗi trường có ý nghĩa khác và một trường hợp sử dụng khác, mặc dù hầu hết chúng không thể sử dụng một mình :)

+0

Nhưng std :: ios_base :: cũng xóa dữ liệu trong tệp, không? Bạn có thể cho tôi một ví dụ mà std :: ios_base :: out không xóa các tập tin? – FrozenHeart

+0

Từ đây: http: // cplusplus.com/reference/iostream/ios_base/openmode/bạn nhận được định nghĩa của từng giá trị. Hơn nữa, câu trả lời này @ veer của bình luận về std :: ios_base :: trong và std :: ios :: trong – Geoffroy

+0

Và bạn có ý nghĩa gì bởi "bạn vẫn có thể đọc từ đầu"? Bạn có thể cho tôi một ví dụ không? – FrozenHeart

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