Trong các ý kiến ở đây - https://stackoverflow.com/a/9393138/8047 - Tôi phát hiện ra rằng BOOL
có một số hành vi không mong muốn khi đặt giá trị của nó từ giá trị int
. Chủ yếu, nếu giá trị được đặt thành 0x1000
, giá trị đó được đánh giá là FALSE
(đáng ngạc nhiên).Ngụ ý của các giá trị int không “phù hợp” - bool hoặc BOOL cho mục tiêu-C?
NSLog(@"All zero? %d %d", (BOOL)0, (bool)0);
NSLog(@"All one? %d %d %d", (BOOL)4095, (BOOL)4096, (BOOL)4097); // 4096=0x1000 or 8-bits
NSLog(@"All one? %d %d %d", (bool)4095, (bool)4096, (bool)4097);
Produces:
All zero? 0 0
All one? -1 0 1
All one? 1 1 1
Tôi nghĩ rằng đây là số lẻ, nhưng sau đó một lần nữa, tôi không đúc từ int
để BOOL
nhiều anyway. Tuy nhiên:
- Điều này có nghĩa là
bool
được ưu tiên làBOOL
? Tại sao hay tại sao không? - Is it okay để sử dụng
if (thatBool) {
hay người ta phải thích
if (thatBool ? YES : NO) {
Và tại sao?
Lưu ý: Đây là phiên bản cụ thể hơn về câu hỏi này - Objective-C : BOOL vs bool - nhưng tôi nghĩ nó thêm vào nó và không trùng lặp.
Bất kỳ liên kết nào trên mẹo đúc '!!'? Những điều này hơi khó tìm kiếm :) –
Đó là một [hai phủ định] đơn giản (http://www.google.com/search?q=c+double+negation), việc tìm kiếm sẽ dễ dàng hơn. – zoul
Cảm ơn @zoul, vâng đủ dễ dàng. Tôi nghĩ rằng 'xem cho các loại phôi nguy hiểm' là đúng. –