Nó trả về một luồng để chúng tôi có thể chuỗi hoạt động.
Nhưng khi bạn sử dụng một đối tượng trong ngữ cảnh boolean, trình biên dịch tìm kiếm toán tử chuyển đổi có thể chuyển đổi nó thành kiểu có thể được sử dụng trong ngữ cảnh boolean.
Trong trường hợp này, luồng có operator void*()
. Vì điều này dẫn đến một con trỏ, nó có thể được sử dụng trong một bối cảnh boolean. Khi được gọi nó sẽ kiểm tra các cờ lỗi. Nếu một trong hai failbit hoặc badbit được thiết lập thì nó trả về NULL tương đương với FALSE nếu không nó sẽ trả về một con trỏ đến tự (hoặc một cái gì đó khác hợp lệ mặc dù bạn không nên sử dụng thực tế này)).
Vì vậy, bạn có thể sử dụng một dòng suối trong bất kỳ bối cảnh đó sẽ yêu cầu xét nghiệm boolean:
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
Lưu ý: Đây là ý tưởng tồi để kiểm tra dòng bên ngoài và sau đó đọc/ghi dữ liệu lên bên trong cơ thể của câu lệnh điều kiện/vòng lặp. Điều này là do hành vi đọc có thể khiến luồng dữ liệu trở nên tồi tệ. Nó thường là tốt hơn để làm đọc như là một phần của thử nghiệm.
while(std::getline(steam, line))
{
// The read worked and line is valid.
}
Nguồn
2011-01-16 22:17:47
istream & là loại trả về. – DumbCoder
vâng, tôi nên nói rằng tôi đã biết điều đó. nhưng rõ ràng một cái gì đó là kỳ lạ về nó, bởi vì một số hình thức đúng hay sai có nguồn gốc từ nó. –
Nó quá tải hoặc là toán tử 'bool' hoặc' void * 'sao cho khi nó được ngầm sử dụng trong điều kiện if(), nó có thể trả về cho dù EOF đã đạt hay không – Cameron