return {};
berarti itu {}
adalah penginisialisasi untuk nilai kembali . Nilai kembali diinisialisasi daftar dengan daftar kosong.
Berikut adalah beberapa latar belakang pada nilai kembalian , berdasarkan [stmt.return] dalam Standar C ++:
Untuk fungsi yang mengembalikan dengan nilai (yaitu tipe yang dikembalikan bukan referensi dan bukan void
), ada objek sementara yang disebut nilai yang dikembalikan . Objek ini dibuat oleh return
pernyataan, dan penginisialisasinya bergantung pada apa yang ada di pernyataan return.
Nilai yang dikembalikan bertahan hingga akhir ekspresi penuh dalam kode yang memanggil fungsi; jika ia memiliki tipe kelas, maka destruktornya akan berjalan kecuali ia memiliki masa pakai diperpanjang oleh pemanggil yang mengikat referensi langsung padanya.
Nilai kembali dapat diinisialisasi dengan dua cara berbeda:
Dengan asumsi T
adalah jenis kembalian fungsi, maka catatan yang return T{};
berbeda dengan return {}
: di sebelumnya, sementara T{}
dibuat, dan kemudian nilai kembalian diinisialisasi salinan dari sementara itu.
Ini akan gagal untuk dikompilasi jika T
tidak memiliki copy / move-constructor yang dapat diakses, tetapi return {};
akan berhasil bahkan jika konstruktor tersebut tidak ada. Dengan demikian, return T{};
mungkin menunjukkan efek samping dari copy-konstruktor dll, meskipun ini adalah konteks penghapusan salinan jadi mungkin tidak.
Berikut rekap singkat dari daftar-inisialisasi di C ++ 14 (N4140 [dcl.init.list] / 3), di mana penginisialisasi adalah daftar kosong:
- Jika
T
merupakan agregat, maka setiap anggota diinisialisasi dari brace-or-equal-initializer jika ada, sebaliknya seolah-olah oleh{}
(jadi terapkan langkah-langkah ini secara rekursif).
- Jika
T
adalah tipe kelas dengan konstruktor default yang disediakan pengguna, konstruktor tersebut akan dipanggil.
- Jika
T
adalah tipe kelas dengan = default
konstruktor default yang didefinisikan secara implisit, atau ed default, objek tersebut diinisialisasi nol dan kemudian konstruktor default dipanggil.
- Jika
T
adalahstd::initializer_list
, nilai yang dikembalikan adalah daftar kosong tersebut.
- Jika tidak (yaitu
T
tipe non-kelas - tipe kembalian tidak bisa berupa array), nilai kembalian diinisialisasi nol.