Khi bạn viết một hàm bạn phải đảm bảo kiểm tra hết các edge cases của nó, đó là việc bình thường. Lấy lại cái ví dụ sqrt của bạn. Trong document của C++ định nghĩa đàng hoàng Exception, loại gì, tham số gì:
Square root of x.
If x is negative, a domain error occurs: If a domain error occurs:
- And math_errhandling has MATH_ERRNO set: the global variable errno is set to EDOM.
- And math_errhandling has MATH_ERREXCEPT set: FE_INVALID is raised.
Việc bạn không kiểm tra object = null có thể chấp nhận được vì gọi kiểu nào nó cũng raise một exception phổ biến là NullPointerException (Java) - chứ không có nghĩa là các trường hợp tương tự bạn cũng làm như vậy. Không đảm bảo kiểm tra edge cases là sai cơ bản về kỹ thuật, nó là một việc hàm đó phải làm.