Trong cuốn sách Hiệu quả hơn C++ (Số 15), tôi đọc mã đó trở nên chậm hơn đáng kể nếu các ngoại lệ được kích hoạt, ngay cả khi chúng không được sử dụng. Theo tôi, các trường hợp ngoại lệ bị hạn chế sử dụng và tôi cố gắng tránh chúng, nhưng đây là một chủ đề khác.Làm thế nào để tắt xử lý ngoại lệ?
tôi không hoàn toàn hiểu được tuyên bố của ông:
- gì cho phép/vô hiệu hóa ngoại lệ nghĩa là gì? Nó là sự khác biệt giữa việc có không hoặc nhiều hơn số không cố gắng/bắt khối? Nó là một lá cờ biên dịch? Điều gì sẽ xảy ra nếu tôi sử dụng một DLL trong đó các ngoại lệ có thể xảy ra?
- Giả sử không có ngoại lệ được quẳng:
- Liệu mã trở nên chậm hơn như một toàn thể hoặc chỉ những phần mà chương trình vào/thoát thử khối/catch trở nên chậm hơn? Theo tác giả, cả hai đều đúng.
- Tôi làm cách nào để biên dịch mà không có ngoại lệ? Tôi có thể làm điều này ngay cả khi tôi đã thử/nắm bắt các khối không? Tôi có thể làm điều này nếu DLL tôi sử dụng có thể ném ngoại lệ?
Cuốn sách cũ, trình biên dịch đã trở thành một heckofalot thông minh hơn kể từ đó. Một phong nha ngày hôm nay có thể làm điều đó với số không trên không, bằng cách sử dụng tra cứu dựa trên bảng từ địa chỉ hướng dẫn để tìm mã mà cần phải chạy khi ngăn xếp là unwound.Nhưng nếu bạn muốn băn khoăn về nó anyway sau đó xem xét thông qua các tùy chọn trình biên dịch, hầu hết có một tùy chọn để vô hiệu hóa tính năng này. –
"Theo ý kiến của tôi, các trường hợp ngoại lệ bị hạn chế sử dụng, và tôi cố gắng tránh chúng, nhưng đây là một chủ đề khác." Tôi đoán là mã của bạn không gọi bất kỳ cuộc gọi hệ thống nào có thể sai được. Bạn đang lập trình một CPU nóng? –
@ user4590120: Ngoại lệ không phải là cách duy nhất để xử lý lỗi. Tôi sử dụng mã trả lại để kiểm tra thành công hay thất bại. – Fabian