C ++ 11 typy powrotu auto i funkcji

Wiem o różnicy międzyauto, auto&, const auto iconst auto& (na przykład w pętli „dla każdej”), ale jedno, co mnie zaskoczyło, to:

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
}

Czy ktoś może mi powiedzieć, kiedy będziex w wyrażeniuauto x = fun(); nie będzie tego samego typu, co typ wartości zwracanej przezfun()?

questionAnswers(2)

yourAnswerToTheQuestion