Trước khi ai đó nhảy và nói Profile before optimize!
, đây chỉ đơn giản là một câu hỏi tò mò và bắt nguồn từ this original question.Trình biên dịch C++ có tối ưu hóa giá trị trả về không sử dụng bằng `tham chiếu` không?
Nếu tôi trở lại bằng cách tham chiếu cùng một đối tượng, liệu nó có được tối ưu hóa đi nếu không được sử dụng không? Ví dụ, tôi có một Vector<>
có các hàm toán học khác nhau (giả sử tôi không sử dụng toán tử quá tải). Hai cách viết nó:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
HOẶC
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
Bây giờ nếu Add()
được sử dụng mà không cần sử dụng giá trị trả về, sẽ trình biên dịch chỉ đơn giản là vứt bỏ sự trở lại hoàn toàn và chức năng trở nên như thể nó không có giá trị trả về để bắt đầu bằng? Và nếu nó KHÔNG là inlined
thì sao?
+1, một câu trả lời hay khác như mọi khi :) –
Điều này giả định trình biên dịch sẽ xử lý hàm một lần thay vì xử lý nó mỗi khi được gọi. Nhiều trình biên dịch hiện đại làm (hoặc có thể được cấu hình để làm) sau này. Một trong những lý do họ làm như vậy là cho phép chính xác loại tối ưu hóa này. –
"trừ khi trình biên dịch inlining mã không" - có nghĩa là 'ngày nay, với LTO, tất cả các mã không chia sẻ-đối tượng có thể được inlined, vì vậy có lẽ có' :-) –