move-semantics

Poprawne użycie ' = delete` dla metod w klasach

Czy poniższy fragment jest poprawny do undefiniowania wszystkich inaczej wygenerowanych metod i konstruktorów dla klasy? str ... ve-assign operator=(Picture&&) jest poprawny? Czy to robi różnicę, jeśli napisałem Picture&& dla typu return?

Move czy Named Return Value Optimization (Nrvo)?

Powiedzmy, że mamy następujący kod: std::vector<int> f() { std::vector<int> y; ... return y; } std::vec ... f () in temp space, move f () into x, destruct f (). Czy kompilator może używać dowolnego podejścia, zgodnie ze standardem?

Czy domyślny konstruktor Move jest zdefiniowany jako noexcept?

Wygląda na to, że wektor sprawdzi, czy konstruktor ruchu jest oznaczony jako noexcept, zanim podejmie decyzję o przeniesieniu ... ry ruchu, użytkownik może nadal wymusić generowanie niejawnie deklarowanego konstruktora ruchu z słowo kluczowe default.

Czy wbudowane typy mają semantykę ruchu?

Rozważmy Ten kod: #include <iostream> using namespace std; void Func(int&& i) { ++i; } int main() { ... owane typy mają semantykę ruchu? Czy wbudowane obiekty typu po przeniesieniu (jeśli są) mają dobrze zdefiniowane zachowanie?

Implementacja konstruktora Move poprzez wywołanie operatora przypisania Move

Artykuł MSDN, Jak: napisać Konstuktor ruchu , zawiera następujące zalecenia. Jeśli podasz zarówno konstruktor move, jak ... ie zoptymalizować dodatkowe inicjalizacje? Czy zawsze powinienem pisać konstruktory move, wywołując operator przydziału move?

Co gwarantuje biblioteka standardowa w zakresie przydzielania własnych ruchów?

Co standard C++11 mówi o przypisaniu własnego ruchu w stosunku do biblioteki standardowej? Mówiąc konkretniej, co, jeśli już, ... n robi? template<class T> std::vector<T> selfAssign(std::vector<T> v) { v = std::move(v); return v; }

Czy zwracanie z `std:: move` jest sensowne w przypadku wielu poleceń return?

Zdaję sobie sprawę, że zwykle nie jest to dobry pomysł, aby wrócić z std::move, tzn. bigObject foo() { bigObject result; /* ... esult; if(use_fixed_ret) result = fixed_ret; else{ prepare_object(result); } return result; }

Wymusić błąd czasu kompilacji, jeśli STD:: move spowoduje niezamierzoną kopię?

W swoim przemówieniu GoingNative 2013 Scott Meyers wskazał, że std::move nie ma gwarancji, że wygenerowany kod faktycznie wyk ... antyka {[3] } jest otwarta. Wszystko, co pomaga uniknąć głupich błędów w czasie kompilacji bez poważnych wad jest w porządku.

Semantyka ruchu i przeciążenie operatora

Jest to związane z tą odpowiedzią dostarczoną przez Matthieu M. o tym, jak wykorzystać semantykę ruchu z przeciążeniem opera ... ziała poprawnie tylko z operatorem komutacyjnym, nie widzę powodu, dla którego 2 miałby być kiedykolwiek użyty. Coś mi umyka?

Przekazywanie przez wartość vs const & i & & przeciążenia

Więc po sprawdzeniu semantyki move widzę, że ogólny konsensus polega na przekazywaniu wartości, gdy zamierzasz przenieść włas ... żeń odniesienia. Więc pytanie brzmi: czy warto? Kiedy utworzyć dwa przeciążenia zamiast jednej prostej funkcji pass by value?

Czy wektor przesunięty z jest zawsze pusty?

Wiem, że ogólnie norma stawia kilka wymagań na wartości, które zostały przeniesione z: N3485 17.6.5.15 [lib .typy.movedfrom ... tóry pociąga za sobą to, czego mi brakuje, czy jest to podobne do traktowania basic_string jako sąsiadującego bufora w C++03?

Używanie std:: move Z STD:: shared PST

Mam funkcję zdefiniowaną następująco: void foo(std::shared_ptr<X> x) { ... }; Jeśli zgłoszę wspólny ptr do X: std ... o nie ma znaczenia, którą opcję powinienem wybrać? Czy przy podejmowaniu takiej decyzji powinienem brać pod uwagę coś innego?

Czy semantyka C++11 move robi coś nowego, czy tylko czyni semantykę jaśniejszą?

W zasadzie staram się dowiedzieć, czy cała koncepcja "semantyki ruchu" jest czymś zupełnie nowym, czy tylko ułatwia implement ... jak już to zrobiłeś? Czy robi się tu coś nowego, czy jest to po prostu "łatwiejszy" cukier składniowy dla tego, co już robię?

(Brak) ulepszenia wydajności z semantyką C++11 move

Pisałem kod C++11 już od jakiegoś czasu i nie robiłem żadnego benchmarkingu, oczekując tylko, że operacje wektorowe "będą ter ... 11. Dzięki za świetne komentarze i odpowiedzi. Mam nadzieję, że ten post będzie przydatny i interesujący również dla innych.

Co stanowi poprawny stan dla obiektu" przeniesiony z " W C++11?

Staram się ogarnąć, jak powinna działać semantyka move W C++11 i mam sporo problemów ze zrozumieniem, jakie warunki musi speł ... niu w każdej z nich. Czy powinienem po prostu zrezygnować z tego, że bycie w stanie do_stuff jest rozsądnym niezmiennikiem?

Dlaczego C++11 ma ukryte ruchy dla parametrów wartości, ale nie dla parametrów rvalue?

W C++11 parametry wartości (i inne wartości) korzystają z niejawnego ruchu po zwróceniu: A func(A a) { return a; // use ... zas gdy dla odniesienia rvalue odpowiedzialność jest na zewnątrz. Jaka jest motywacja do ich leczenia inaczej w standardzie?

W jakich scenariuszach należy się spodziewać jawnej potrzeby implementacji konstruktora move i operatora move assignment?

Biorąc pod uwagę, że Klasa faktycznie jest ruchoma , ręczne implementowanie konstruktora move i operatora przypisania move d ... jest zawsze generowany automatycznie. Numer referencyjny: http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx