2016-04-14 14 views
5

tôi nghĩ rằng:Làm thế nào để cin đánh giá đúng khi bên trong câu lệnh if?

if (true) 
{execute this statement} 

Vì vậy, làm thế nào để if (std::cin >> X) thực hiện như đúng khi không có gì là "true" về nó? Tôi có thể hiểu nếu đó là if (x <= y) hoặc if (y [operator] x), nhưng loại logic nào là "istream = true?".

+1

nếu "chấp nhận" một bool. do đó bất cứ điều gì bên trong() sẽ được đúc thành bool, thông qua toán tử bool(); ngoài ra, hãy xem http://stackoverflow.com/questions/6791520/if-cin-x-why-can-you-use-that-condition – Exceptyon

+3

Luồng là "true-ish" nếu thao tác cuối cùng thành công. – molbdnilo

+4

Câu hỏi đầu tiên bạn cần phải tự hỏi mình là giá trị của biểu thức '(std :: cin >> X)' là gì. –

Trả lời

9

Câu trả lời phụ thuộc vào phiên bản của chuẩn C++ thư viện:

  • Trước C++ 11 chuyển đổi bên trong if dựa vào chuyển đổi dòng để void* sử dụng operator void*
  • Bắt đầu với C++ 11 việc chuyển đổi dựa vào operator bool của std::istream

Lưu ý rằng std::cin >> X không chỉ là một tuyên bố, mà còn là một biểu hiện. Nó trả về std::cin. Hành vi này là bắt buộc đối với đầu vào "chuỗi", ví dụ: std::cin >> X >> Y >> Z. Hành vi tương tự có ích khi bạn đặt đầu vào bên trong một if: luồng kết quả được chuyển đến operator bool hoặc operator void*, do đó, giá trị boolean được cấp cho điều kiện.

5

std::cin thuộc loại std::basic_istream được kế thừa từ tiêu chuẩn :: basic_ios, có toán tử: std::basic_ios::operator bool được gọi khi được sử dụng trong câu lệnh if.

3

if(x) tương đương với if(bool(x))

trong trường hợp này bool(x) gọi std::istream::operator bool(x)

này sẽ trở lại:

đúng nếu không ai trong số failbit hoặc badbit được thiết lập.

sai khác.

3

Điều kiện bên trong if sẽ được đánh giá là bool.

if(cin >> X) có nghĩa là nếu điều kiện là true, điều gì đó đã được đọc đến X; nếu điều kiện là false, điều gì đó khác đã xảy ra (ví dụ: luồng đã kết thúc) và X không bị thay đổi.

Ví dụ: để đọc cho đến cuối luồng, bạn có thể sử dụng while(cin >> X).

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