2015-08-31 6 views
3

С введением семантики перемещения было ли правило, что вы можете привязывать временные переменные только к константной ссылке? Не-const, похоже, продлевает срок службы так же хорошо.Нерелевая ссылка на временные работы сейчас?

A getA() { return A();} 

A & aref = getA(); //OK 
string & str = string("h") + string("i"); //OK again 

Это с msvc, деструктор для A не вызывается перед главными выходами.

+0

Какую версию MSVC вы используете? – NathanOliver

+0

Обновление msvc11 4 – ollo

ответ

6

Нет, правила одинаковы, вам не разрешено связывать значение r с ссылкой на не константу lvalue. MSVC использует (опасное) расширение.

+0

Можете ли вы объяснить опасность в возможности редактировать возвращаемое значение из неконстантной ссылки? Это просто тот факт, что люди могут попытаться вернуть ссылки на фактические функции, а не накладывать временные ограничения? – ollo

+0

@ollo См. Это http://stackoverflow.com/q/1565600/3093378 – vsoftco

+0

MSVC выдает предупреждение о том, что это нестандартное расширение. –