вместо этого это была постоянная ссылка, и это было бы разрешено стандартом.
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::string
VS2008 не так уж и плох, как минимум, он даетпредупреждение о компиляции: предупреждение C4239: использовано нестандартное расширение: «инициализация»: преобразование изstd::string
вstd::string &
Неконстантная ссылка может быть связана только с lvalueЗдесь возникает проблемный - VS2010 (SP1) прекрасно работает без каких-либо ошибок или предупреждений, ПОЧЕМУ ?? !! я знаюRvalue ссылка в VS2010 можно использовать для привязки с rvalue, но я не использую&&
вместо этого в демонстрационном коде я просто использовал неконстантную ссылку на lvalue!Может ли кто-нибудь помочь мне объяснить поведение VS2010 здесь? Это ошибка!? Спасибо