выражение и я могу создать move перегрузку foo, тогда “abc” будет отдано в нее?
Нет: строковые литералы - lvalue. Представьте, что "text" - своеобразное имя для char const[n] со static-storage-duration. Т.е. приблизительно как если бы char const[] text{"text"}; int main ( ) { foo(text); }
Да
Ты можеш написать && ну вообше то да const str это всегда lvalue
Если это одноразовая строка, и я хочу ускорить программу, стоит писать foo(std::move(“abc”))?
Это ничего не даст: релевантное про перемещение.
Так если у меня есть move перегрузка foo, то foo(std::move(“abc”)) позволит мне избежать копирования?
Совсем "что угодно" - нет. Но любой объектный указатель неявно приводим к указателю на void. Т.е., например: int i; void f ( void* ); /* ... */ f(&i);
Лучше почитайте сообщение, к которому я отослал, чтобы понять, что делает move(). Перегрузка не сможет воспользоваться правой ссылочностью с т.з. переиспользования какого-то, если она для массива констант.
Обсуждают сегодня