Computer >> Máy Tính >  >> Lập trình >> C ++

Sao chép tách và tối ưu hóa giá trị trả về trong C ++ là gì?

Copy Elision còn được gọi là Copy Omission. Đây là một trong những trình tối ưu hóa trình biên dịch. Nó tránh việc sao chép các đối tượng không cần thiết. Hầu hết mọi trình biên dịch hiện tại đều sử dụng kỹ thuật CopyElision này.

Hãy để chúng tôi xem nó hoạt động như thế nào với sự trợ giúp của một mã ví dụ.

Mã mẫu

#include <iostream>
using namespace std;
class MyClass {
   public:
   MyClass(const char* str = "\0") { //default constructor
      cout << "Constructor called" << endl;
   }
   MyClass(const MyClass &my_cls) { //copy constructor
      cout << "Copy constructor called" << endl;
   }
};
main() {
   MyClass ob = "copy class object";
}

Đầu ra

Constructor called

Bây giờ chúng ta hãy thảo luận tại sao hàm tạo bản sao không được gọi?

Vì vậy, khi một đối tượng đang được xây dựng, một đối tượng tạm thời được tạo ra và nó sao chép vào đối tượng thực tế. Vì vậy, chúng tôi có thể nói rằng bên trong nó sẽ trông như thế này.

MyClass ob = "copy class object";

Sẽ hoạt động như.

MyClass ob = MyClass("copy class object");

Các trình biên dịch C ++ tránh loại chi phí này.