Результаты поиска по запросу "move-semantics"
, если сильно помогает производительности, если вы, например, поместите свой класс в
ИТЬвнизу q1:Как бы вы реализовалиправило пяти [https://stackoverflow.com/questions/4782757/rule-of-three-becomes-rule-of-five-with-c0x] для класса, который управляет довольно большими ресурсами, но вы хотите, чтобы он передавался по значению, ...
Почему std :: move предотвращает RVO?
Во многих случаях при возврате локального из функции, RVO вступает в силу. Однако я думал, что явно используяstd::move по крайней мере, принудительное перемещение, когда RVO не происходит, но это RVO все еще применяется, когда это возможно. ...
@ildjarn Не с моими компиляторами, это не так. Семантика перемещения недоступна в большинстве компиляторов, а те, которые я использую, не используют их в стандартной библиотеке, даже если они доступны.
у заполнить std :: vector (или какой-нибудь другой контейнер STL): class Foo { public: Foo(int _n, const Bar &_m); private: std::vector<Foo> fooes_; }1. Хорошо выглядящий ctor, высокая производительность std::vector<Foo> get_vector(int _n, ...
Я целенаправленно использовал терминологию ОП в своем ответе. Стандарт стремится быть точным, но это паршивый учебник. Я не (и до сих пор не понимаю), что я был расплывчатым. Это, конечно, распространенная ошибка, от которой я не застрахован. Я с удовольствием уточню, знаю ли я, какие части моего ответа были неоднозначными. Моя цель - распространять знания, а не сбивать их с толку.
тим, у нас есть следующий код: std::vector<int> f() { std::vector<int> y; ... return y; } std::vector<int> x = ... x = f();Кажется, у компилятора есть два подхода: (a) NRVO: уничтожить x, затем построить f () вместо x. (b) Перемещение: ...
следующее:
ительно недавно,много [https://stackoverflow.com/questions/6380862/how-to-provide-a-swap-function-for-my-class] вопросов [https://stackoverflow.com/questions/6402463/swap-for-custom-type-in-c-use-adl-or-template-specialization] ...
по мере того, как компиляторы набирают скорость с C ++ 0x и реализации становятся зрелыми
отрим случай, когда «целые» объекты с включенной семантикой перемещения возвращаются из функций, как сstd::basic_string<>: std::wstring build_report() const { std::wstring report; ... return report; } Можно ли реально ожидать, что я сделаю ...
std :: vector <Foo>, когда некоторые члены Foo являются ссылками
Я часто предпочитаю использовать ссылки, а не указатели, когда это возможно, это делает синтаксис более чистым, по моему мнению. В этом случае у меня есть класс: class Foo { public: Foo(Bar & bar) : bar_(bar) {} private: Bar & bar_; ...
Это все равно что ожидать, что оператор + сложит все вместе. Возможно, его нет в Стандарте, но это ожидаемое и вежливое поведение, чтобы уничтожить то, что вы назначаете.
мер, stdlibc ++ имеет следующее: unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*this); __u._M_device = 0; __u._M_owns = false; return *this; }Почему бы просто не назначить двух членов __u * ...
Ход какие броски?
Насколько я понимаю, move-constructors и move-assign должны быть помечены как noexcept, чтобы компилятор мог их использовать, например, при перераспределении внутри вектора. Тем не менее, есть ли какой-нибудь реальный случай, когда команда ...
Назначение перемещения несовместимо со стандартным копированием и обменом
Тестирование новой семантики Move. Я только что спросил о проблемах, которые у меня были с конструктором Move. Но, как выясняется в комментариях, проблема в том, что оператор «Назначение перемещения» и оператор «Стандартное назначение» ...