Неконстантная ссылка может быть привязана только к lvalue
Может кто-нибудь объяснить, как имитировать эту ошибку? а также то, о чем это жалуется.
"Неконстантная ссылка может быть привязана только к lvalue" в С++
Ответ 1
Значение l, грубо говоря, может быть в левой части оператора присваивания. Ссылки предоставляют псевдонимы для других объектов:
std::string s;
std::string & rs = s; // a non-const reference to s
std::string const & crs = s; // a const reference to s
Учитывая приведенные выше определения, ссылка на rs или crs совпадает с ссылкой на s, за исключением того, что вы не можете изменить указанную строку через crs, поскольку она является константой. Переменная - это lvalue, поэтому вам разрешено привязывать к ней не-const ссылку. Напротив, вы можете связывать ссылки const со временными значениями, как в:
std::string const & crs1 = std::string();
Однако следующее незаконно:
std::string & rs1 = std::string();
Это связано с тем, что с помощью ссылок, не содержащих константы, вы подразумеваете, что хотите изменить ссылочный объект. Однако временные ссылки, связанные с ссылками, уничтожаются, когда ссылка выходит за рамки. Поскольку это не всегда интуитивно, когда С++ создает временные объекты, привязка их к неконстантным ссылкам была запрещена, чтобы избежать неприятного сюрприза для изменения вашего объекта по своему усмотрению, просто чтобы увидеть, как он уничтожил несколько утверждений позже.
Ответ 2
Это означает, что вы не можете сделать что-то вроде этого: