2012-05-02 26 views
7

thể trùng lặp:
Double Negation in C++ codeĐang sử dụng '!!' trong thực hành tốt C/C++ và nó có phổ biến không?

Theo như tôi biết, không có C/C++ sách hướng dẫn hoặc hướng dẫn sử dụng đề cập đến kỹ thuật này. Có lẽ vì nó chỉ là một điều nhỏ bé, không đáng nói đến.

Tôi sử dụng nó vì C/C++ trộn kiểu bool với int, long, pointer, double etc ... với nhau. Nó rất phổ biến để cần phải chuyển đổi một bool không thành bool. Nó không an toàn để sử dụng (bool) giá trị để làm điều đó, vì vậy tôi sử dụng !! để làm điều đó.

Ví dụ:

bool bValue = !!otherValue; 
+0

Tôi chưa từng nghe về bất kỳ sự cố nào với nó. – chris

+6

"Không an toàn để sử dụng (bool) giá trị để làm điều đó" Tại sao? –

+1

Vấn đề này đã được thảo luận tại đây: http://stackoverflow.com/questions/248693/double-negation-in-c-code và http://stackoverflow.com/questions/8617090/double-negation-in-c- is-it-guaranteed-to-return-0-1 – Juliano

Trả lời

9

Tôi nghĩ !! là khá rõ ràng so với một số lựa chọn khác như:

if (foo) 
    bar = 1; 
else 
    bar = 0; 

hoặc bar = foo ? 1 : 0;

Kể từ !! thực hiện chính xác một điều, tôi thấy nó rất rõ ràng.

+5

Vâng, tôi đồng ý rằng nó ổn, nhưng '!! foo' là * ít * mơ hồ hơn' foo? 1: 0'? Tôi không thể đồng ý với điều đó. –

+0

@EdS. Heh, trên thực tế, tôi đã đăng chủ yếu để phản đối bài đăng của bạn - tôi không đồng ý với quan điểm của bạn, và đã hình dung chúng tôi sẽ để cho các phiếu bầu quyết định. Cho đến nay bạn cũng đang dẫn đầu. :) – sarnold

+0

+1 để bỏ phiếu –

5

Trong trường hợp này chính xác:

bool bValue = !!otherValue; 

bạn không cần phải viết !!. Nó sẽ hoạt động tốt mà không có chúng:

bool bValue = otherValue; 

Tôi nghĩ rằng trong hầu hết các trường hợp, việc đúc ngầm sẽ tốt đẹp.

+0

Truyền ngầm (khi nó có thể gây cắt xén dữ liệu) gây ra cảnh báo trình biên dịch, việc truyền rõ ràng (thông qua toán tử trong trường hợp này) thì không. – ildjarn

19

Đó là tốt, bất kỳ C hoặc C++ lập trình viên nên nhận ra nó, nhưng tôi muốn một cái gì đó rõ ràng hơn như

(x != 0) 
+2

+1 Mã rõ ràng hơn là mã tốt hơn – Juliano

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