Câu hỏi Hợp lý !! so với không có gì


Tôi chỉ tìm thấy điều này trong tập tin tiêu đề guiddef.h của Microsoft:

__inline bool operator==(REFGUID guidOne, REFGUID guidOther)
{
    return !!IsEqualGUID(guidOne,guidOther);
}

Có điểm nào cho !!, hoặc là một số dev chỉ cảm thấy dễ thương ngày hôm đó?


11
2017-08-13 21:28


gốc


Đó là một cách phổ biến để chuẩn hóa các giá trị thành 0 hoặc 1, nó cũng cung cấp cho bạn một chuyển đổi thành loại tích phân. - Shafik Yaghmour
Liên quan stackoverflow.com/q/1310344/57428 - sharptooth
Điều này có lẽ không nên được gắn thẻ C, vì operator== cụ thể cho C ++. - Keith Thompson


Các câu trả lời:


Nó tắt Visual C ++ cảnh báo hiệu suất ngớ ngẩn cho việc chuyển đổi sang boolean.


13
2017-08-13 21:30



Yeap, cảnh báo là C4800. Họ cũng có thể sử dụng tốt return IsEqualGUID(guidOne, guidOther) != 0; có hiệu quả giống nhau. - sharptooth
@sharptooth: Về lý do != 0 không phải là quy ước chung, nó có ưu tiên và vị trí khác biệt và không cho vay chính nó để nhận diện trực quan phía trước. Vì vậy, có nhiều lý do tại sao họ không thể làm tốt điều đó. Họ có thể làm điều đó, về mặt kỹ thuật, có, nhưng không phải là tốt. ;-) - Cheers and hth. - Alf
Với ngữ nghĩa của kiểu chuẩn C ++ bool, cũng không !! cũng không !=0 là cần thiết; chuyển đổi sẽ được thực hiện hoàn toàn và nó sẽ hoạt động giống như !!. Mã, hoặc ít nhất là thành ngữ, có thể có từ trước khi C ++ có bool như một kiểu tích hợp, hoặc ít nhất trước khi nó hoạt động như trong C ++ hiện đại. Chuyển đổi rõ ràng thành bool (bằng cách sử dụng bất kỳ hương vị của diễn viên là thích hợp nhất) có thể đã được rõ ràng hơn và có lẽ cũng sẽ có ức chế cảnh báo. - Keith Thompson
@ KeithThompson: không, các phương tiện khác không ngăn chặn cảnh báo. - Cheers and hth. - Alf
Một diễn viên rõ ràng không ngăn cản cảnh báo chuyển đổi? thở dài - Keith Thompson


Trong trường hợp đặc biệt này, Alf có lẽ đúng.

Nếu không, nó là thành ngữ phổ biến để chuẩn hóa các giá trị số nguyên thành 1 (nếu chúng bắt đầu nonzero) hoặc 0 (nếu chúng bắt đầu bằng 0) cho các phép toán logic.


5
2017-08-13 21:43