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 returnpernyataan, 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 Tadalah 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 Ttidak 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
Tmerupakan 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
Tadalah tipe kelas dengan = defaultkonstruktor default yang didefinisikan secara implisit, atau ed default, objek tersebut diinisialisasi nol dan kemudian konstruktor default dipanggil.
- Jika
Tadalahstd::initializer_list , nilai yang dikembalikan adalah daftar kosong tersebut.
- Jika tidak (yaitu
Ttipe non-kelas - tipe kembalian tidak bisa berupa array), nilai kembalian diinisialisasi nol.