C++ Temporary object ve expressions ile ilgili bir soru

Arkadaşlar


#include <iostream>

int main()
{
    std::string first_n = "Efe Osman";
    std::string last_n = "Aslanoglu ";
    std::string full_n = first_n + last_n;
    
    return 0;
}

Böyle yaptığımızda full_n atanmadan önce bir temporary object yani geçici bir alan oluşturuluyor böylece expression gerçekleşiyor sonucu temporary object e yazdiriliyor ve son olarak temporary object in değeri full_n ye kopyalanıyor ve aynı expression satırının sonunda temporary object temizleniyor…(açıklamada sorun varsa düzeltin)…şimdi sorum şu; neden expression un sonucunu başka bir yerde tutup ordan da asıl istediğimiz yere kopyaliyoruz direk atama yapmak varken?

1 Beğeni

Yapmadigimizdan emin misin? RVO’ya girebilir gibi gozukuyor.

C++'in genel sikintisi bir suru low level magic metodu olmasi ve expression’larin bu metod cagrilarina nasil donustugunun karmasik olmasi. Yan etkileri olabilen bu metodlarin cagrilarinin optimize edilmesi* potensiyel bug kaynagi.

Veya:

Temporary istemiyorsan niye operator+ kullandin?


*: optimize out; optimizasyonla silinmesi