2010-08-16 32 views
5

Tôi đang khám phá boost::tribool và đã rất ngạc nhiên bởi hành vi sau đây.Boost :: tribool: hành vi kỳ lạ hoặc lỗi?

{ 
using namespace boost; 

boost::tribool t(indeterminate); 

assert(t==indeterminate); // This assertion fails! 
} 

Tuy nhiên, nếu tôi làm điều này, xác nhận sẽ chuyển.

assert(indeterminate(t)); 

Không cảnh báo trình biên dịch hoặc lỗi nào trong cả hai trường hợp. Bất cứ ai có một lời giải thích tốt về lý do tại sao điều này nên được ??

Trả lời

11

Tôi nghĩ rằng câu trả lời là trong documentation:

kết quả của việc so sánh hai giá trị không xác định là không xác định (không đúng) - chúng tôi không biết những gì các giá trị, vì vậy chúng tôi không thể nói rằng họ là công bằng;

chức năng indeterminate có thể được sử dụng để kiểm tra xem tribool có ở trạng thái không xác định hay không.

+0

Và vì không xác định chuyển đổi hoàn toàn thành bool false, khẳng định không thành công. –

+1

"kết quả so sánh hai giá trị không xác định là không xác định". Ouch. Tôi đoán điều đó có ý nghĩa ở một cấp độ, nhưng nó không trực quan với tôi. – Roddy

+0

@ Rất tiếc, hãy xem triển khai tribool :: operator ==() bạn đã sẵn sàng chưa? nó trả về tribool! Tôi ghét người đã gửi mã này để tăng cường: D +1 cho câu hỏi hay, đây KHÔNG phải là hành vi trực quan! –

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