2010-01-27 21 views

Trả lời

50

Bạn cần:

  • một tài liệu tham khảo để bạn có thể truy cập vào các ngoại lệ polymorphically
  • một const để tăng hiệu suất, và nói với trình biên dịch bạn sẽ không cải tiến đối tượng

Sau này không phải là quan trọng như trước đây như trước đây, nhưng lý do thực sự duy nhất để thả const sẽ là báo hiệu rằng bạn muốn thực hiện thay đổi đối với ngoại lệ (thường chỉ hữu ích nếu bạn muốn làm lại nó với tiếp tục được thêm vào ext vào một cấp độ cao hơn).

+15

'một const để tăng hiệu suất' Làm thế nào? –

+1

"cho trình biên dịch biết bạn sẽ không sửa đổi đối tượng" —Tôi cho rằng có thể hữu ích nếu bạn truyền đối tượng dưới dạng tham số cho cuộc gọi hàm. –

+1

ý của bạn là gì khi 'truy cập ngoại lệ đa hình'? – mango

5

Nó nói với trình biên dịch rằng bạn sẽ không được gọi bất kỳ chức năng mà thay đổi ngoại lệ, có thể giúp tối ưu hóa mã. Có lẽ không tạo ra nhiều khác biệt, nhưng chi phí làm nó cũng rất nhỏ.

0

Vì lý do tương tự, bạn sử dụng một const.

+0

Và vì lý do tương tự như lý do tại sao bạn thích tham khảo hơn con trỏ :-) –

+11

Đơn giản và glib, nhưng không thực sự là câu trả lời. – Omnifarious

1

bạn sẽ sửa đổi ngoại lệ? nếu không, nó cũng có thể là const. cùng một lý do bạn NÊN sử dụng const ở bất kỳ nơi nào khác (tôi nói NÊN vì nó không thực sự tạo ra sự khác biệt nhiều trên bề mặt, có thể giúp trình biên dịch, và cũng giúp các lập trình viên sử dụng mã của bạn đúng cách và không làm những thứ mà họ không nên)

xử lý ngoại lệ, có thể là nền tảng cụ thể và có thể đặt ngoại lệ ở những nơi vui nhộn vì chúng không mong đợi chúng thay đổi?

18

Về cơ bản không có lý do gì cả.

Đối tượng ngoại lệ sống trong không gian bộ nhớ riêng của chúng & dagger; vì vậy bạn không phải lo lắng về việc bắt ngoại lệ được tạo trong biểu thức tạm thời.

Tất cả những gì bạn đang làm là hứa hẹn rằng bạn sẽ không sửa đổi đối tượng ngoại lệ, nhưng vì các đối tượng ngoại lệ phải có giao diện bất biến & Dagger;, thực sự không có gì thực tế ở đây.

Tuy nhiên, nó có thể khiến bạn cảm thấy ấm áp và ấm cúng khi bạn đọc nó — đó là cách nó dành cho tôi!

& dagger; Chúng có ngăn xếp cục bộ, đặc biệt, riêng của chúng.
& Dagger;Tuyên bố từ chối trách nhiệm: Boost.Exception vi phạm điều này để thực hiện các nội dung thú vị và thêm chi tiết ngoại lệ, sau xây dựng. Nhưng đây là hackery!

+0

Bạn có thể vui lòng giải thích về 'các đối tượng ngoại lệ sống trong không gian bộ nhớ của riêng mình' không? Bạn có một đọc tốt để đề xuất về nó? –

+0

@LeFlou: Tôi có thể chỉ cho bạn các tiêu chuẩn, nhưng nó sẽ là một chút sai lầm để cho rằng "một đọc tốt" ...: P –

+0

Chắc chắn có, nó sẽ là thú vị để tìm hiểu thêm về điều này từ điểm tiêu chuẩn của lượt xem. Tôi đang đọc [Báo cáo kỹ thuật về hiệu suất C++] (http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf), bạn có tài liệu liên quan hơn không? –

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