Запитання з тегом «move-semantics»

12
Що таке семантика руху?
Я щойно закінчив слухати інтерв'ю радіо подкастів Software Engineering з Скоттом Майєрсом щодо C ++ 0x . Більшість нових функцій мали для мене сенс, і я зараз захоплююсь C ++ 0x, за винятком однієї. Я все ще не отримую семантики руху ... Що це саме?

7
push_back vs emplace_back
Я трохи розгублений щодо різниці між push_backі emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); Оскільки є push_backперевантаження з урахуванням рецензії, я не зовсім розумію, якою emplace_backстає мета ?


6
C ++ 11 переоцінює та змішує зміщення семантики (виписка із повернення)
Я намагаюся зрозуміти рецензії на значення і перемістити семантику C ++ 11. Яка різниця між цими прикладами, і який із них не буде робити жодної векторної копії? Перший приклад std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Другий приклад std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; …

3
Що таке "посилання на оцінку для цього *?"
На сторінці статусу C ++ 11 кланг потрапила пропозиція під назвою "rvalue reference for * this" . Я читав досить багато про посилання на оцінку і розумів їх, але не думаю, що знаю про це. Я також не міг знайти багато ресурсів в Інтернеті, використовуючи умови. На сторінці розміщено посилання …

2
Чи може сучасний C ++ отримати продуктивність безкоштовно?
Іноді стверджується, що C ++ 11/14 може підвищити продуктивність навіть при простому компілюванні коду C ++ 98. Виправдання, як правило, узгоджується з семантикою переміщення, оскільки в деяких випадках конструктори rvalue автоматично генеруються або тепер є частиною STL. Тепер мені цікаво, чи раніше ці випадки фактично вже розглядалися RVO чи подібними …

6
Чому б я std :: перемістити std :: shared_ptr?
Я переглядав вихідний код Clang і знайшов цей фрагмент: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Чому я хочу ?std::movestd::shared_ptr Чи є якась точка передачі права власності на спільний ресурс? Чому б я просто не зробив це замість цього? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

2
Що я можу зробити з переміщеним об'єктом?
Чи визначає стандарт точно, що я можу зробити з об'єктом після його переміщення? Раніше я думав, що все, що ти можеш зробити з переміщеним об'єктом - це знищити його, але цього було б недостатньо. Наприклад, візьміть шаблон функції, swapяк визначено у стандартній бібліотеці: template <typename T> void swap(T& a, T& …

6
Як використовувати користувацький делетер з членом std :: unique_ptr?
У мене клас з унікальним членом_ptr. class Foo { private: std::unique_ptr<Bar> bar; ... }; Штрих - це сторонній клас, який має функцію create () та знищити (). Якби я хотів використовувати це std::unique_ptrз ним у самостійній функції, я міг би: void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); …


4
Коли зробити тип нерухливим в C ++ 11?
Я був здивований, що це не з’явилося в моїх результатах пошуку, я думав, що хтось би це запитував раніше, враховуючи корисність семантики переміщення в C ++ 11: Коли я повинен (або мені це подобається) зробити клас нерухливим на C ++ 11? ( Інші причини, ніж проблеми сумісності з існуючим кодом, …

1
Неможливо перемістити запозичений вміст / не можна вийти за спільну довідку
Я не розумію помилки cannot move out of borrowed content. Я його отримував багато разів і завжди вирішував, але ніколи не розумів, чому. Наприклад: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } видає помилку: error[E0507]: cannot move out of borrowed …

6
Перемістіть оператор призначення та `if (this! = & Rhs)`
В операторі присвоєння класу зазвичай потрібно перевірити, чи призначений об'єкт є об'єктом, що викликає, щоб ви не накручували речі: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } Вам потрібна те ж саме для оператора призначення переміщення? Чи буває колись ситуація, …

3
Яка перевага використання посилань для переадресації в діапазоні для циклів?
const auto&Було б достатньо, якщо я хочу виконувати операції лише для читання. Однак я натрапив на for (auto&& e : v) // v is non-const пару разів останнім часом. Це мене здивує: Можливо чи, що в деяких неясних випадках кутових є деякі бенефіси в використанні посилання переадресації, по порівнянні з …

2
Як std :: move () передає значення в RValues?
Я просто виявив, що не повністю розумію логіку std::move(). Спочатку я погуглив це, але здається, що є лише документи про те, як користуватися std::move(), а не як працює його структура. Я маю на увазі, я знаю, що таке функція члена шаблону, але коли я std::move()вивчаю визначення у VS2010, воно все …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.