C ++ 11 Auto- und Funktionsrückgabetypen

Ich kenne den Unterschied zwischenauto, auto&, const auto undconst auto& (zum Beispiel in einer "für jede" Schleife), aber eine Sache, die mich überrascht hat, ist:

std::string bla;
const std::string& cf()
{
    return bla;
}


int main (int argc, char *argv[])
{
    auto s1=cf();
    const std::string& s2=cf();
    s1+="XXX"; // not an error
    s2+="YYY"; //error as expected
}

Kann mir also jemand sagen, wann die Art vonx im Ausdruckauto x = fun(); entspricht nicht dem Typ des Rückgabewerts vonfun()?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage