ต่อท้ายคำตอบJaredPar
ctor 1 ปกติ, 2- ฟังก์ชั่นเหมือน ctor กับวัตถุชั่วคราว
รวบรวมแหล่งนี้ที่ใดที่หนึ่งที่นี่http://melpon.org/wandbox/ด้วยคอมไพเลอร์ที่แตกต่างกัน
// turn off rvo for clang, gcc with '-fno-elide-constructors'
#include <stdio.h>
class Thing {
public:
Thing(const char*){puts(__FUNCTION__ );}
Thing(const Thing&){puts(__FUNCTION__ );}
~Thing(){puts(__FUNCTION__);}
};
int main(int /*argc*/, const char** /*argv*/) {
Thing myThing = Thing("asdf");
}
และคุณจะเห็นผล
จาก ISO / IEC 14882 2003-10-15
8.5 ตอนที่ 12
การก่อสร้างที่ 1 และ 2 ของคุณเรียกว่าการเริ่มต้นโดยตรง
12.1 ตอนที่ 13
การแปลงประเภทสัญกรณ์ทำงาน (5.2.3) สามารถใช้เพื่อสร้างออบเจ็กต์ใหม่ของประเภทนั้น [หมายเหตุ: ไวยากรณ์ดูเหมือนว่าจะมีการเรียกตัวสร้างอย่างชัดเจน ] ... วัตถุที่สร้างในลักษณะนี้ไม่มีชื่อ [หมายเหตุ: 12.2 อธิบายอายุการใช้งานของวัตถุชั่วคราว ] [หมายเหตุ: การเรียกตัวสร้างอย่างชัดเจนไม่ได้ให้ค่า lvalues ดู 3.10 ]
จะอ่านเกี่ยวกับ RVO ได้ที่ไหน:
12 ฟังก์ชั่นสมาชิกพิเศษ / 12.8 การคัดลอกคลาสอ็อบเจ็กต์ / ส่วนที่ 15
เมื่อเกณฑ์ที่แน่นอนจะได้พบกับการดำเนินการที่ได้รับอนุญาตที่จะละเว้นการก่อสร้างสำเนาของวัตถุชั้นแม้กระทั่งถ้านวกรรมิกสำเนาและ / หรือ destructor สำหรับวัตถุมีผลข้างเคียง
ปิดโดยใช้ธงคอมไพเลอร์จากความคิดเห็นเพื่อดูพฤติกรรมการทำสำเนา)