2013-06-05 38 views
7

Một vài ngày trước, khi đọc Standard C++ news Tôi đã đọc các bài về Defaulted functions in C++11, trong bài viết được đề cập rằng các nhà xây dựng người dùng định nghĩa là kém hiệu quả hơn so với một tạo ra bởi trình biên dịch:Các nhà xây dựng mặc định do người dùng định nghĩa có kém hiệu quả hơn không?

Người dùng định nghĩa constructor mặc định kém hiệu quả hơn trình biên dịch ngầm định hàm tạo mặc định.

Tiếp tục đọc, có một ví dụ trong đó một nhà xây dựng người dùng xác định được đánh dấu là mặc định, và sau đó nói:

các mặc định một cách rõ ràng constructor là hiệu quả hơn một constructor mặc định bằng tay lập trình.

Tôi không hiểu những khẳng định, vì vậy tôi đã tự hỏi:

  • Tại sao một nhà xây dựng sử dụng mặc định (hoặc hàm thành viên đặc biệt) sẽ ít hiệu quả hơn so với các trình biên dịch ngầm được xác định một?
  • Hiệu suất được cải thiện như thế nào bằng cách mặc định rõ ràng một hàm tạo (hoặc hàm thành viên đặc biệt)?
  • Hướng dẫn nào tôi phải tuân theo để chọn mặc định một hàm tạo (hoặc hàm thành viên đặc biệt) và cách hiệu quả ảnh hưởng đến quyết định này?
+0

http://stackoverflow.com/questions/4275861/why-would-the-implicitly-generated-constructor-et-al-be-more-efficient-than-a?rq = 1 – shivakumar

+0

Tốt nhất @shivakumar nhưng cả hai câu hỏi chưa có câu trả lời được chấp nhận, ngay cả câu hỏi bạn đã đề cập là từ năm 2010! : O –

Trả lời

3

Tôi nghĩ rằng một tuyên bố tốt hơn là một hàm tạo mặc định do người dùng xác định MAY kém hiệu quả hơn trình biên dịch được tạo ra. Ví dụ, khi nó tạo ra một hàm tạo mặc định bên trong trình biên dịch có thể đưa ra các giả định và tối ưu hóa mà nó không thể thực hiện cho một contstructor do người dùng định nghĩa (các tác dụng phụ xuất hiện trong tâm trí). Cũng cần lưu ý rằng một hàm tạo mặc định do người dùng định nghĩa có thể thực hiện công việc hoàn toàn khác mà mặc định xây dựng tất cả các thành viên của nó, dẫn đến việc nó kém hiệu quả hơn (nhưng cũng chính xác hơn). Điều này dường như không phải là trường hợp trong liên kết bạn cung cấp tuy nhiên.

+0

* "Cũng nên nhớ rằng một hàm tạo mặc định do người dùng định nghĩa có thể làm việc hoàn toàn khác với việc xây dựng mặc định tất cả các thành viên của nó" * - Tất nhiên, nhưng tôi đoán trường hợp đó vẫn chưa được thảo luận. Nhưng điểm tốt về tối ưu hóa quy mô lớn hơn có thể. –

0

Và tất cả chúng ta đều biết rằng nếu nó được viết trên internet thì phải đúng ... Đợi đã, chúng ta?

Trong bài viết mà tôi thấy xác nhận đầu tiên kém hiệu quả hơn, tác giả nói sự thật. Mặc dù bạn dường như hiểu sai nó - trong ví dụ nó đề cập đến ctor tay crafted sử dụng phân công. Vì không có lý do chính đáng, và đi ngược lại 2 hướng dẫn cũ.

Ví dụ tiếp theo, cùng một trường hợp. (Như một lưu ý thực tế tôi sẽ thêm, mà cho bất kỳ trình biên dịch tuyên bố để có tối ưu hóa tôi mong đợi cùng một đầu ra assy ngay cả đối với hình thức đó ...)

Tôi thấy không có lý do tại sao thích hợp ctor viết tay sẽ khác mặc định theo bất kỳ cách nào, kể cả hiệu quả. OTOH nếu họ giống hệt nhau tại sao trên trái đất viết nó? Tôi quá hạnh phúc vì trình biên dịch tạo ra nó cho tôi. Và cuối cùng tôi thậm chí có thể kiểm soát nó theo một số cách mà trước đây tôi không thể. Có thể sử dụng nhiều chức năng như vậy. ;-)

+0

"* Và chúng ta đều biết, rằng nếu nó được viết trên internet thì nó phải là đúng" Tôi đã giả định rằng nó phải là đúng do phông chữ;) đó là lý do tại sao tôi đề cập đến phông chữ. –

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