Вопросы с тегом «move-semantics»

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

7
push_back против emplace_back
Я немного сбит с толку относительно разницы между push_backи emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); Поскольку существует push_backперегрузка, принимающая ссылку на rvalue, я не совсем понимаю, для чего это emplace_backделается?


6
C ++ 11 значения и путаница в семантике перемещения (оператор return)
Я пытаюсь понять rvalue ссылки и переместить семантику 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}; return …

3
Что такое «rvalue reference для * this»?
На странице статуса C ++ 11 в Clang наткнулся на предложение под названием «ссылка на rvalue для * this» . Я прочитал довольно много о ссылках на rvalue и понял их, но я не думаю, что знаю об этом. Я также не мог найти много ресурсов в Интернете, используя термины. …

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::moveэто std::shared_ptr? Есть ли смысл передавать право собственности на общий ресурс? Почему бы мне просто не сделать это вместо этого? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

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

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


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 …

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

3
В чем преимущество использования ссылок пересылки в циклах for на основе диапазона?
const auto&было бы достаточно, если я хочу выполнять операции только для чтения. Однако я наткнулся на for (auto&& e : v) // v is non-const пару раз за последнее время. Это заставляет меня задуматься: Возможно ли, что в некоторых непонятных угловых случаях есть некоторое преимущество в производительности при использовании ссылок …

2
Как std :: move () передает значения в RValues?
Я просто обнаружил, что не до конца понимаю логику std::move(). Сначала я погуглил, но похоже, что есть только документы о том, как использовать std::move(), а не о том , как работает его структура. Я имею в виду, что я знаю, что такое функция-член шаблона, но когда я смотрю на std::move()определение …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.