[Câu hỏi này có liên quan đến nhưng không giống như this one.]!! một cách an toàn để chuyển đổi sang bool trong C + +?
Nếu tôi cố gắng sử dụng các giá trị của một số loại như biểu thức boolean, tôi nhận được một cảnh báo. Thay vì ngăn chặn cảnh báo, đôi khi tôi sử dụng toán tử bậc ba (?:
) để chuyển đổi thành một bool. Sử dụng hai toán tử không (!!
) dường như làm điều tương tự.
Đây là những gì tôi muốn nói:
typedef long T; // similar warning with void * or double
T t = 0;
bool b = t; // performance warning: forcing 'long' value to 'bool'
b = t ? true : false; // ok
b = !!t; // any different?
Vì vậy, không kỹ thuật đúp không thực sự làm điều tương tự? Nó có an toàn hơn nhiều so với kỹ thuật bậc ba không? Kỹ thuật này có an toàn không kém với các loại không tách rời (ví dụ: với void *
hoặc double
cho T
)?
Tôi không hỏi nếu !!t
là kiểu tốt. Tôi hỏi nếu nó có ngữ nghĩa khác với t ? true : false
.
Khi tôi nhìn thấy một dòng như "b = t đúng:? False;" Tôi luôn bị cám dỗ để thay thế nó bằng dòng "b = t". Đã có một diễn viên tiềm ẩn để bool, tại sao ngữ nghĩa mince? –
như Q nói, bởi vì b = t đưa ra một cảnh báo – jwfearn
thú vị có bao nhiêu người chống lại '!!' trên cơ sở chủ quan. đôi phủ định là * * thành ngữ-cast-bool xe trong JavaScript, và nếu javascripters nhận được nó, tôi mong đợi người dùng C++ cũng sẽ. –