Có vấn đề với chuyển đổi boolean. Nó cho phép các cú pháp gần như luôn luôn là một nỗi đau.
Có, thật may mắn là một giải pháp: thành ngữ Safe Bool.
Sự cố với chuyển đổi thành bool
là chuyển đổi tiềm ẩn nguy hiểm.
std::auto_ptr<T> p = ..., q = ....;
if (p < q) // uh ?
Do đó, operator bool() const
là một sự ghê tởm. Hoặc bạn cung cấp một phương pháp rõ ràng ... hoặc bạn sử dụng thành ngữ bool an toàn.
Ý tưởng về thành ngữ là cung cấp cho bạn một thể hiện của một loại với một tập hợp con khá nhỏ về các thao tác và hầu như không có trường hợp chuyển đổi ẩn sẽ khiến bạn gặp rắc rối. Điều này được thực hiện bằng cách sử dụng một con trỏ đến hàm thành viên.
Thao tác như if (p)
và if (!p)
sau đó có ý nghĩa, nhưng if (p < q)
sẽ không biên dịch được.
Đọc kỹ liên kết để biết giải pháp hoàn chỉnh và bạn sẽ nhận ra lý do tại sao không nên có operator bool() const
.
Nguồn
2010-06-30 17:24:27
Câu hỏi http://stackoverflow.com/q/2953530/427532 có phần liên quan. –