Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การกำจัดการคัดลอกและการเพิ่มประสิทธิภาพค่าส่งคืนใน C ++ คืออะไร


Copy Elision เรียกอีกอย่างว่า Copy Omission นี่เป็นหนึ่งในเทคนิคการเพิ่มประสิทธิภาพคอมไพเลอร์ มันหลีกเลี่ยงการคัดลอกวัตถุโดยไม่จำเป็น คอมไพเลอร์ปัจจุบันเกือบทั้งหมดใช้เทคนิค CopyElision นี้

ให้เราดูว่ามันทำงานอย่างไรด้วยความช่วยเหลือของโค้ดตัวอย่างเดียว

โค้ดตัวอย่าง

#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";
}

ผลลัพธ์

Constructor called

ตอนนี้ให้เราคุยกันว่าทำไมตัวสร้างการคัดลอกจึงไม่ถูกเรียก

ดังนั้นเมื่อมีการสร้างอ็อบเจ็กต์ ออบเจ็กต์ชั่วคราวหนึ่งรายการจะถูกสร้างขึ้นและคัดลอกไปยังอ็อบเจ็กต์จริง ดังนั้นเราสามารถพูดได้ว่าภายในมันจะเป็นแบบนี้

MyClass ob = "copy class object";

จะทำงานเป็น.

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

คอมไพเลอร์ C++ หลีกเลี่ยงโอเวอร์เฮดประเภทนี้