Dalam menambahkan jawaban JaredPar
1-ctor biasa, 2nd-function-like-ctor dengan objek sementara.
Kompilasi sumber ini di suatu tempat di sini http://melpon.org/wandbox/ dengan kompiler yang berbeda
// 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");
}
Dan Anda akan melihat hasilnya.
Dari ISO / IEC 14882 2003-10-15
8.5, bagian 12
Konstruksi ke-1, ke-2 Anda disebut inisialisasi langsung
12.1, bagian 13
Konversi tipe notasi fungsional (5.2.3) dapat digunakan untuk membuat objek baru dari tipenya. [Catatan: Sintaksnya terlihat seperti panggilan eksplisit dari konstruktor. ] ... Objek yang dibuat dengan cara ini tidak disebutkan namanya. [Catatan: 12.2 menjelaskan umur benda sementara. ] [Catatan: panggilan konstruktor eksplisit tidak menghasilkan nilai, lihat 3.10. ]
Di mana membaca tentang RVO:
12 Fungsi anggota khusus / 12.8 Menyalin objek kelas / Bagian 15
Ketika kriteria tertentu terpenuhi, implementasi diperbolehkan untuk menghilangkan konstruksi salinan objek kelas, bahkan jika konstruktor dan / atau destruktor untuk objek memiliki efek samping .
Matikan itu dengan flag compiler dari komentar untuk melihat perilaku copy-seperti itu)