Я изо всех сил пытаюсь понять rvalues на C++. В частности, я не понимаю, где они выделены и почему они должны быть неизменными. Предположим, у меня есть следующий код:Выделение и неизменность ссылок на rvalues в C++
std::string str = std::string();
const std::string& sref = std::string();
Первая строка создает объект в стеке. Объект str
является изменяемым объектом, и я могу делать все, что захочу. Выражение справа от присваивания равно rvalue, а str
- значение lvalue, насколько я понял.
Вторая строка создает объект в текущем стеке функций (я полагаю) и возвращает ссылку на константу. Созданный объект неизменен. Опять же, правая часть задания - это rvalue, но на этот раз я получил ссылку на rvalue. Вся ссылка, для rvalue ДОЛЖНА быть const, потому что согласно стандарту C++ вы не можете изменить значение rvalue. Первый вопрос, где sref
выделено в текущем стеке функций? Почему это должно быть неизменным? Я действительно не понимаю, почему, если объект находится в стеке, я не могу его просто изменить.
Если объект неизменен, имеет смысл иметь только один экземпляр, а затем сделать все ссылки в приложении, чтобы указать на него.
const std::string& ref_1 = std::string();
const std::string& ref_2 = std::string();
следующие два ссылок, ссылающихся на один и тот же объект в C++?
C не C++ не является «C с классами». – Olaf
@Olaf: Где OP предположил, что это так? –
@Olaf Я не понимаю ваш комментарий? Как это связано с моим вопросом? Где я упоминаю C? –