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

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


Copy elision เป็นการปรับให้เหมาะสมที่คอมไพเลอร์ส่วนใหญ่นำไปใช้ เพื่อป้องกันสำเนาพิเศษ (อาจมีราคาแพง) ในบางสถานการณ์ ดังนั้นหากคุณมีโค้ดที่สร้างอ็อบเจกต์ที่ไม่ได้ใช้หรือไม่มีผลข้างเคียง

ตัวอย่าง

struct MyStruct {
   MyStruct() {}
   MyStruct(const MyStruct&) {
      std::cout << "Copied.\n";
   }
};
MyStruct f() {
    return MyStruct();
}
int main() {
   std::cout << "Main\n";
   MyStruct obj = f();
}

ผลลัพธ์

คุณสามารถรับผลลัพธ์ใด ๆ ต่อไปนี้ตามคอมไพเลอร์และการตั้งค่า -

Main

Main
Copied
Copied

Main
Copied

ซึ่งหมายความว่าสามารถสร้างอ็อบเจ็กต์ได้น้อยกว่าที่คุณคาดไว้ ดังนั้นคุณจึงไม่สามารถพึ่งพาคอนสตรัคเตอร์และตัวทำลายล้างจำนวนเฉพาะที่ถูกเรียกได้ คุณไม่ควรมีตรรกะที่สำคัญใน copy/move-constructors หรือ destructors เนื่องจากคุณไม่สามารถวางใจได้ว่าจะถูกเรียก