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 returnifade 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.
TEriş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
Ttoplamsa, 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
Tbir kullanıcı tarafından sağlanan varsayılan kurucu ile bir sınıf tipi, yani kurucu denir.
- Eğer
Tbir dolaylı tanımlanmış ya da bir sınıf tipidir = defaulted varsayılan kurucu, amacı, sıfır başlatıldı ve sonra varsayılan yapıcı olarak adlandırılır.
- Eğer
Tbir a std::initializer_listise, 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.