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

Copy Initialization vs Direct Initialization ใน C++

สองรูปแบบการ initialize object:

Copy Initialization

Type obj = value; // ใช้ copy/move constructor
Type obj = other_obj; // copy initialization
  • สร้าง temporary แล้ว copy/move (อาจ elided)
  • ต้องมี accessible copy/move constructor
  • explicit constructor ไม่สามารถใช้ได้

Direct Initialization

Type obj(value); // เรียก constructor โดยตรง
Type obj{value}; // C++11 uniform initialization
Type obj(other_obj); // direct initialization
  • เรียก constructor ตรงๆ ไม่สร้าง temporary
  • รองรับ explicit constructors
  • มีประสิทธิภาพมากกว่าหรือเท่ากัน

ตารางเปรียบเทียบ

ลักษณะCopy InitDirect Init
SyntaxT x = a;T x(a); หรือ T x{a};
Explicit constructorErrorOK
Temporary objectอาจสร้าง (copy elision)ไม่สร้าง
Assignment operatorไม่เกี่ยวข้องไม่เกี่ยวข้อง (แต่ x = a ใช้ assignment)

แนะนำ

ใช้ Direct initialization (uniform initialization {}) เป็นหลัก ป้องกัน narrowing conversions และรองรับ explicit constructors