Mọi lệnh gọi hệ thống không cập nhật errnogiá trị.
Do đó, bạn có thể có thêm thông tin về những gì sẽ xảy ra khi ifstreammở không thành công bằng cách sử dụng một cái gì đó như:
cerr << "Error: " << strerror(errno);
Tuy nhiên, vì mọi lệnh gọi hệ thống đều cập nhật errnogiá trị chung, bạn có thể gặp sự cố trong ứng dụng đa luồng, nếu lệnh gọi hệ thống khác gây ra lỗi giữa việc thực thi f.openvà sử dụng errno.
Trên hệ thống với tiêu chuẩn POSIX:
errno là luồng cục bộ; việc đặt nó trong một chuỗi không ảnh hưởng đến giá trị của nó trong bất kỳ chuỗi nào khác.
Chỉnh sửa (cảm ơn Arne Mertz và những người khác trong nhận xét):
e.what() thoạt đầu có vẻ là một cách thực thi điều này đúng theo ngữ nghĩa hơn trong C ++, tuy nhiên chuỗi được trả về bởi hàm này phụ thuộc vào việc triển khai và (ít nhất là trong libstdc ++ của G ++) chuỗi này không có thông tin hữu ích về lý do đằng sau lỗi ...