2009-10-28 9 views

Trả lời

24

Vâng, bạn có thể thiết lập nó với ios::setstate, như vậy:

#include <iostream> 
#include <ios> 

int main() 
    { 
    std::cout << "Hi\n"; 

    std::cout.setstate(std::ios::failbit); 

    std::cout << "Fail!\n"; 
    } 

Kết quả thứ hai sẽ không được sản xuất bởi vì cout là trong tình trạng thất bại.

(Ngoại lệ có vẻ sạch hơn đối với tôi, nhưng YMMV)

+0

Nó cũng hoạt động đối với luồng đầu vào như được yêu cầu. –

+0

Có, cả hai luồng đầu vào và đầu ra đều bắt nguồn từ ios và ios_base –

+7

Tôi nghĩ rằng thiết lập 'failbit' là một cách tiếp cận rất hợp lệ để báo cáo lỗi trực tuyến khi mã máy khách có thể sử dụng cùng' if (in >> val) {/ * Thành công * /} 'thành ngữ mà chúng có thể sử dụng cho các kiểu cơ bản. –