Thực ra bạn thậm chí không thể phát hiện tràn tràn đáng tin cậy sau khi thực tế vì tràn trong các kết quả hoạt động số nguyên đã ký trong hành vi không xác định. Nếu trình biên dịch có thể thấy rằng một đường dẫn mã chỉ đạt được trong trường hợp tràn, nó được phép tối ưu hóa nó hoàn toàn (vì trong trường hợp hành vi không xác định nó có thể làm bất cứ điều gì cả). Các kiểu không được ký khác nhau ở chỗ chúng đã xác định các đặc tính tràn (chúng thực hiện số học modulus).
Vì vậy, cách duy nhất để phát hiện tràn với các loại đã ký là thực hiện kiểm tra thích hợp trước, điều này khá tốn kém. Nó hầu như luôn luôn hiệu quả hơn để thiết kế những thứ như vậy mà một bất biến của thuật toán của bạn đảm bảo rằng không thể có một tràn.
Đối với nguồn lực vào việc phát hiện tràn càng tốt trước khi nó xảy ra, thấy https://stackoverflow.com/a/199413/445525
Nguồn
2012-06-02 20:27:05
Thay vì sử dụng các giá trị nguyên liệu, bạn có thể sử dụng đối tượng với các nhà khai thác số học quá tải mà ném ngoại lệ khi tràn xảy ra. – jamesdlin
hoạt động mà bạn đang thực hiện trên các con số là gì? – Baget
@Baget có thể là bất cứ thứ gì. cộng, trừ, nhân, số mũ, v.v. phụ thuộc vào chương trình. –