вместо этого это была постоянная ссылка, и это было бы разрешено стандартом.

string foo() { return "hello"; }
int main() 
{
    //below should be illegal for binding a non-const (lvalue) reference to a rvalue
    string& tem  = foo();   

    //below should be the correct one as only const reference can be bind to rvalue(most important const)
    const string& constTem = foo();   
}
это хороший способ датьошибка компиляции: неверная инициализация неконстантной ссылки типаstd::string& из временного типаstd::stringVS2008 не так уж и плох, как минимум, он даетпредупреждение о компиляции: предупреждение C4239: использовано нестандартное расширение: «инициализация»: преобразование изstd::string вstd::string & Неконстантная ссылка может быть связана только с lvalueЗдесь возникает проблемный - VS2010 (SP1) прекрасно работает без каких-либо ошибок или предупреждений, ПОЧЕМУ ?? !! я знаюRvalue ссылка в VS2010 можно использовать для привязки с rvalue, но я не использую&&вместо этого в демонстрационном коде я просто использовал неконстантную ссылку на lvalue!

Может ли кто-нибудь помочь мне объяснить поведение VS2010 здесь? Это ошибка!? Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос