Описание тега stdmove

1 ответ

Поможет ли std::move() при построении объекта в операторе return или предотвратит RVO?

Из-за широкого спектра ответов от сообщества, я спрашиваю об этом в надежде разоблачить специфичные для реализации ответы от пользователей переполнения стека. Какой из них является наилучшим (предлагает наибольшую оптимизацию)? // version 1 MyObject…
27 июл '17 в 00:07
3 ответа

Использование std::move для передачи временной лямбды или для "извлечения" временного параметра, и в чем разница?

У меня есть следующий (надуманный) код, где у меня есть класс принтера с единственной функцией печати и рабочим классом, который обрабатывает строку и затем вызывает функцию обратного вызова для функции печати: #include <functional> #include &…
13 сен '18 в 07:19
1 ответ

std::move с внутренними объектами - нет соответствия для вызова

Код ниже не компилируется. Главный: #include "preset.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); SomeA a1(4); WrapA wA1(a1); WrapA wA2(std::move(wA1)); //fails to compile here return a.exec(); } preset.h: #include <QDebu…
24 авг '18 в 11:32
2 ответа

std::tuple и переместить семантику

Интересно о двух вещах.1. движется std::tuple стоит реализовать? Например для std::tuple<int, int, int> мы что-нибудь получим? Будет ли это быстрее, чем копирование или передача по ссылке?2. В приведенном ниже примере, есть ли реальная разница…
02 июл '18 в 21:09
2 ответа

Должен ли я изменить этот код, который использует push_back для использования std::move?

Я только что прочитал о ссылках rvalue, и ниже приведен код, на который я ссылаюсь vector<string> v; string s = "hello"; v.push_back(s); cout << s << endl; cout << v[0] << endl; return 0 Мой вопрос заключается в том, чт…
27 янв '19 в 17:06
5 ответов

Использование объекта после std::move не приводит к ошибке компиляции

После std::move вызывается для объекта, почему язык не вызывает ошибку компиляции, если объект используется после? Это потому, что компилятор не может обнаружить это условие?
14 мар '17 в 20:13
4 ответа

C++ с использованием массива без вызова конструктора

Моя задача - создать массив типов шаблонов без вызова конструктора T (шаблон). После этого я хочу переместить одно значение в этот массив из другого с помощью std:: move. Как я могу сделать это в C++? Вот мой код: void *temp = malloc((end-begin) * s…
28 мар '17 в 09:49
1 ответ

C++: я должен явно использовать std::move() в операторе возврата для принудительного перемещения?

РЕДАКТИРОВАТЬ: это не дубликат, потому что этот вопрос спрашивает о решении компилятора в O0. Здесь сказано, что Оптимизация возвращаемого значения имени (NRVO) - это поддержка многих компиляторов. Но это необходимость или просто приятная оптимизаци…
14 авг '17 в 18:37
9 ответов

Что такое std::move() и когда его следует использовать?

Что это? Что оно делает? Когда его следует использовать? Хорошие ссылки приветствуются.
05 авг '10 в 09:42
2 ответа

std::move() и xvalue в C++

Может кто-нибудь дать мне "ациклическое" определение / объяснение поведения xvalue и std:: move ()? Я посмотрел на страницу cppreference, и там написано, что "std:: move () создает xvalue". (Хорошо) Затем я искал определение "xvalue" и первое, что о…
29 янв '18 в 18:20
1 ответ

std::vector, std::move и указатель недействительности

Мой вопрос относится к следующему шаблону... Я хотел бы использовать следующий шаблон для построения дорогого для построения SomeData, а затем переместите его в UsesData, Так что вопрос... Указатели в ud.dat.m_ptrs гарантированно будет действительны…
15 май '17 в 20:47
2 ответа

Невозможно вставить std::unique_ptr с пользовательским средством удаления с помощью std::move

Я использую std::unique_ptr с пользовательским удалителем в качестве значения std::map следующее: #include <iostream> #include <memory> #include <map> void deleter(int* p){ std::cout<<"Deleting..."<<std::endl; delete p;…
28 июн '18 в 18:13
2 ответа

Где использовать std::move для строк?

Я читал этот пост. И я дошел до следующего кода. Я размышлял: Является std::move полезно для строк (при условии, что строка достаточно длинная)? Это делает недействительной предыдущую строку? Где я должен его использовать, а где нет? , class Name { …
16 дек '17 в 01:00
1 ответ

Является ли передний адрес std::vector перемещением инвариантным?

В следующем фрагменте: std::vector<double> a(100, 4.2); auto* a_ptr = a.data(); auto b = std::move(a); auto* b_ptr = b.data(); std::cout << ((b_ptr == a_ptr) ? "TRUE" : "FALSE") << '\n'; стандарт C++ гарантирует, что b_ptr всегда р…
25 июл '18 в 19:34
2 ответа

Возможно ли иметь типы с операциями перемещения, которые выбрасывают контейнеры?

Объясняя операции перемещения над объектами с коллегой, я в основном говорил, что операции перемещения не должны генерировать исключения в контейнере, потому что если операция перемещения не удалась, то нет способа надежно вернуть исходный объект. Д…
29 май '18 в 17:40
1 ответ

Передача rvalue ссылки на QVariant не работает с QString

Я пытаюсь вернуть ссылку на rvalue из функции в QVariant. Это работает для bool и int, но когда я передаю строку, я получаю недопустимый QVariant. Моя функция: QVariant &&AudioSettings::getValueFromTable(const QString &name) { QSqlQuery …
19 янв '18 в 15:32
2 ответа

Вернуть объект с помощью std::move и связать функцию

Я сделал метод, который возвращает объект таким образом: MyObject && MyController::getMyObject (const otherObject & options) const { MyObject tmp; tmp.doSometing(options); return std::move(tmp); } Позже в моем коде я хотел использовать э…
23 окт '18 в 13:12
2 ответа

Приведение к rvalue ссылки на "форсирование" перемещения возвращаемого значения - уточнение

Хорошо, я начинаю получать список ссылок на rvalue (я думаю). У меня есть этот фрагмент кода, который я писал: #include <iostream> using namespace std; std::string get_string() { std::string str{"here is your string\n"}; return std::move(str);…
19 сен '18 в 11:52
2 ответа

Как std::move делает недействительным значение исходной переменной?

В следующих примерах из ссылки на cpp: #include <iostream> #include <utility> #include <vector> #include <string> int main() { std::string str = "Hello"; std::vector<std::string> v; // uses the push_back(const T&) o…
19 авг '18 в 09:58
1 ответ

Почему std::move() работает в C++?

Ниже приведен фрагмент кода: int i=0; int&&k=std::move(i); В праймере с ++ ход template <typename T> typename remove_reference<T>::type &&move(T&& t) {return static_cast<typename remove_reference<T>::type…
22 фев '18 в 14:57