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 ??
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. –
"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
@ 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! –