Theo 4.7 (chuyển đổi Integral), khoản 4, "Nếu loại đích là bool
, xem 4.12.Nếu loại nguồn là bool
, giá trị false
được chuyển thành 0 và giá trị true
được chuyển thành giá trị. "Trong 4.12," Giá trị số học, số đếm, con trỏ hoặc con trỏ thành loại thành viên có thể được chuyển đổi thành giá trị loại bool
. Giá trị bằng không, giá trị con trỏ null hoặc giá trị con trỏ thành viên null được chuyển đổi thành false
; bất kỳ giá trị khác được chuyển thành true
."
Trong một bối cảnh nơi bool
toán hạng không được phép nhưng toán hạng không thể thiếu được, các bool
sẽ được chuyển đổi sang một loại không thể thiếu. Khi kết quả số nguyên được lưu trữ trong một biến bool
, nó sẽ được chuyển đổi thành bool
.
Do đó, bạn sẽ có thể sử dụng dấu + và * làm boolean hoặc và, và bạn cũng có thể sử dụng | và &.) & bool3 sẽ mang lại false
nếu cả ba biến là true
. ((1 + 1) & 1 là 2 & 1, là 0 hoặc sai.)
Hãy nhớ rằng | và || không làm việc giống hệt ngay cả ở đây. | sẽ đánh giá cả hai mặt, và sau đó đánh giá bitwise hoặc. || sẽ đánh giá toán hạng đầu tiên, sau đó chỉ khi đó là sai sẽ đánh giá thứ hai.
Tôi sẽ không thảo luận các vấn đề về phong cách ở đây, nhưng nếu tôi làm bất cứ điều gì như thế, tôi chắc chắn sẽ nhận xét nó để mọi người biết tôi đang làm gì và tại sao.
Nguồn
2009-08-18 17:14:32
tuyệt vời, cảm ơn. Tôi sẽ bỏ phiếu hai lần nếu tôi có thể –
+1 để trích dẫn tiêu chuẩn (và trả lời câu hỏi), đồng thời thêm nhận xét về phong cách – Gabe