В этом потоке ( Должен ли я вернуть параметр ссылки rvalue по ссылке rvalue? ), записано, что The parameter cannot be a temporary (which is just what rvalue references represent)
.Если я хорошо понимаю это предложение, этот код не должен быть правильным
#include <string>
#include <iostream>
std::string &&f(std::string &&a) {
return std::move(a);
}
int main() {
std::string a = f("lol");
std::cout << a << std::endl;
return 0;
}
Однако, когда мы смотрим на std::get
, кажется, что он возвращает ссылку на rvalue для временного кортежа, и я на самом деле думаю, что естьнет проблем с использованием std::get
с временным кортежем.
Итак, я думаю, что я неправильно понял предложение выше, и предыдущий код верен.Однако это не правильно:
#include <string>
#include <iostream>
std::string &&f(std::string &&a) {
return std::move(a);
}
int main() {
std::string &&a = f("lol");
std::cout << a << std::endl;
return 0;
}
Было бы правильно, если бы функция возвращала значение, а не ссылку на значение.Я прав?