или нужно явно указать тип возвращаемой функции std::vector<int>&&
std::vector<int> create_vector(int n){
std::vector<int> vi(n);
std::iota(vi.begin(), vi.end(), 1);
return v;
}
int main(){
std::vector<int> v = create_vector(1000);
}
по идее NRVO должно сработать
Всё сработает.
std::vector<int> - это prvalue
Там важнее то, что категория для v подправляется как раз в рамках move-eligibility. Но да, в современном языке там в худшем случае перемещение.
Здесь сработает антагонист мув семантики, RVO/NRVO
Вот в таких примерах использование MU в семантики - это антипатерн ну то есть как бы не надо здесь её пихать
Если вы хотите вернуть && ссылку, то одно из трёх: - Либо вы пишете std::move, std::declval - Либы вы пишете && аннотированный метод класса - Либо вы делаете что-то не так
Обсуждают сегодня