return {};
bu {}
, dönüş değeri için başlatıcı olduğu anlamına gelir . Dönüş değeri, boş bir listeyle liste olarak başlatılır.
C ++ Standardında [stmt.return] 'e dayalı olarak dönüş değeri hakkında bazı arka plan bilgileri aşağıda verilmiştir :
Değere göre dönen bir işlev için (yani dönüş türü bir başvuru değildir ve değildir void
), dönüş değeri olarak adlandırılan geçici bir nesne vardır . Bu nesne return
ifade tarafından yaratılır ve onun başlatıcıları return ifadesinde ne olduğuna bağlıdır.
Dönüş değeri, işlevi çağıran koddaki tam ifadenin sonuna kadar hayatta kalır; sınıf türüne sahipse, çağıran tarafından doğrudan kendisine bir başvuru bağlayarak ömrü uzatılmadığı sürece yıkıcısı çalışacaktır.
Dönüş değeri iki farklı şekilde başlatılabilir:
T
İşlevin dönüş türü olduğu varsayılırsa , şundan return T{};
farklı olduğuna dikkat edin return {}
: birincisinde, bir geçici T{}
oluşturulur ve sonra dönüş değeri bu geçiciden kopyalanarak başlatılır.
T
Erişilebilir bir kopya / taşıma yapıcısı yoksa bu derleme başarısız olur , ancak return {};
bu kurucular mevcut olmasa bile başarılı olur. Buna göre, return T{};
kopya yapıcı vb. Yan etkilerini gösterebilir, ancak bu bir kopya seçim bağlamıdır, bu nedenle olmayabilir.
C ++ 14'te (N4140 [dcl.init.list] / 3) liste başlatmanın kısa bir özeti , burada başlatıcı boş bir listedir:
- Bir
T
toplamsa, her üye, eğer varsa , küme ayracı veya ekolayzerinden başlatılır , aksi halde sanki {}
(bu adımları yinelemeli olarak uygulayın).
- Eğer
T
bir kullanıcı tarafından sağlanan varsayılan kurucu ile bir sınıf tipi, yani kurucu denir.
- Eğer
T
bir dolaylı tanımlanmış ya da bir sınıf tipidir = default
ed varsayılan kurucu, amacı, sıfır başlatıldı ve sonra varsayılan yapıcı olarak adlandırılır.
- Eğer
T
bir a std::initializer_list
ise, dönüş değeri böyle boş bir listedir.
- Aksi takdirde (yani
T
, sınıf dışı bir türdür - dönüş türleri dizi olamaz), dönüş değeri sıfır ile başlatılır.