2012-04-25 25 views
13

Tôi nhớ mã hóa trên nền tảng có cả RTTI và ngoại lệ bị vô hiệu hóa và trên những nền tảng khác đã bật cả hai. Tuy nhiên, tôi không thể nhớ mã hóa trên một nền tảng có thể kích hoạt một và vô hiệu hóa một nền tảng khác.Có mối quan hệ nào giữa RTTI và ngoại lệ không?

Có loại phụ thuộc nào giữa hai khái niệm không? Nói khác đi, ngoại lệ có cần RTTI hoạt động không? Hay ngược lại?

+0

AFAIR MSVC 5 hoặc 6 đã tắt và ngoại lệ theo mặc định. Có thể là sai, đã lâu lắm rồi. –

+0

Bài viết này về [orthogonality của RTTI và ngoại lệ] (http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-orthogonality /) thêm vào chủ đề này. Nó cho thấy rằng mặc dù các chức năng tiếp xúc là độc lập, ngoại lệ trong gcc thực sự sử dụng phiên bản riêng của "RTTI" để làm việc. – Chuim

Trả lời

10

Không, ngoại lệ không cần chức năng RTTI và ngược lại cả hai đều là các tính năng riêng biệt.

Một số triển khai có thể cho phép bạn vô hiệu hóa ngoại lệ (không có ngoại lệ trong gcc) nhưng tôi không biết bất kỳ triển khai nào cần RTTI cho ngoại lệ hoặc ngược lại.

+6

Có lẽ các ngoại lệ không cần các tính năng C++ RTTI rõ ràng như type_info và dynamic_cast, nhưng chắc chắn chúng cần một số loại RTTI. Ngoại lệ được ném phải có khả năng so sánh kiểu của nó với các trình xử lý bắt trên ngăn xếp ngoại lệ, bao gồm một số loại RTTI. –

1

Chúng không phụ thuộc lẫn nhau nhưng chúng là cả hai tính năng nặng nên nếu có nền tảng có hiệu suất kém thì có thể cả hai sẽ được cắt cùng nhau.

+0

Đây là một đối số khá lỗi thời. Trường hợp ngoại lệ có chi phí thời gian chạy bằng không cho đến khi chúng được ném (điều này chỉ xảy ra trong các trường hợp ngoại lệ). RTTI tương tự chỉ tăng kích thước mã. Nếu kích thước mã là một vấn đề mà cả hai đều thêm kích thước, nhưng chúng không cản trở hiệu suất chỉ bằng cách được kích hoạt. –

Các vấn đề liên quan