Một đặc tả không ném vào một hàm nội tuyến chỉ trả về một biến thành viên và không thể ném ngoại lệ có thể được sử dụng bởi một số trình biên dịch để thực hiện bi quan (một từ tạo thành đối lập với tối ưu hóa) có thể có tác động bất lợi đến hiệu suất. Điều này được mô tả trong tài liệu Boost: Đặc tả ngoại lệ
Với một số trình biên dịch một đặc tả không ném vào các hàm không nội tuyến có thể có lợi nếu việc tối ưu hóa chính xác được thực hiện và việc sử dụng hàm đó ảnh hưởng đến hiệu suất theo cách nó chứng minh điều đó.
Đối với tôi nghe có vẻ như có nên sử dụng nó hay không là một cuộc gọi được thực hiện bởi một con mắt rất quan trọng như là một phần của nỗ lực tối ưu hóa hiệu suất, có lẽ là sử dụng các công cụ định hình.
Một trích dẫn từ liên kết trên cho những người vội vàng (chứa một ví dụ về các tác động không mong muốn xấu của việc chỉ định ném vào một hàm nội tuyến từ trình biên dịch ngây thơ):
Lý do ngoại lệ-đặc điểm kỹ thuật
Thông số kỹ thuật ngoại lệ [ISO 15.4] đôi khi được mã hóa để chỉ ra ngoại lệ nào có thể được ném hoặc bởi vì lập trình viên hy vọng họ sẽ cải thiện hiệu suất. Nhưng hãy xem xét các thành viên sau từ một con trỏ thông minh:
Toán tử T & toán tử * () const throw () {return * ptr; }
Hàm này gọi không có chức năng nào khác; nó chỉ thao tác các kiểu dữ liệu cơ bản như con trỏ Do đó, không có hành vi thời gian chạy nào của đặc tả ngoại lệ có thể được gọi. Các chức năng được tiếp xúc hoàn toàn với trình biên dịch; thực sự nó được khai báo nội tuyến Do đó, một trình biên dịch thông minh có thể dễ dàng suy ra rằng các hàm không có khả năng đưa ra các ngoại lệ và thực hiện các tối ưu hóa tương tự mà nó đã thực hiện dựa trên đặc tả ngoại lệ trống. Một trình biên dịch "ngu ngốc", tuy nhiên, có thể làm cho tất cả các loại bi quan.
Ví dụ, một số trình biên dịch tắt nội tuyến nếu có một đặc tả ngoại lệ. Một số trình biên dịch thêm khối thử / bắt. Sự bi quan như vậy có thể là một thảm họa hiệu năng làm cho mã không thể sử dụng được trong các ứng dụng thực tế.
Mặc dù ban đầu hấp dẫn, một đặc điểm kỹ thuật ngoại lệ có xu hướng có hậu quả đòi hỏi phải suy nghĩ rất cẩn thận để hiểu. Vấn đề lớn nhất với các đặc tả ngoại lệ là các lập trình viên sử dụng chúng như thể chúng có hiệu ứng mà lập trình viên muốn, thay vì hiệu ứng mà họ thực sự có.
Hàm không nội tuyến là nơi đặt ngoại lệ "không ném gì" - đặc tả có thể có một số lợi ích với một số trình biên dịch.