rvalue-reference

Co oznacza T& & (double ampersand) w C++11?

Przyglądałem się kilku nowym funkcjom C++11 i jedną z nich zauważyłem jest podwójne ampersand w deklarowaniu zmiennych, takic ... ka wydaje się być podwójnym odniesieniem (jak podwójne wskaźniki w stylu C T** var), ale trudno mi myśleć o przypadku użycia.

Rule-of-Three staje się Rule-of-Five z C++11?

Więc po obejrzeniu tego wspaniałego wykładu na temat referencji rvalue, pomyślałem, że każda klasa skorzysta z takiego "kons ... . Tak jak ty powinieneś mieć copy-ctor, operator przypisania i destruktor, jeśli dotyczą wymienione wcześniej punkty. Myśli?

C++11 rvalues and move semantyka confusion (return statement)

Próbuję zrozumieć referencje rvalue i przenieść semantykę C++11. Jaka jest różnica między tymi przykładami, a który z nich n ... ector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = return_vector();

Czy zwracanie przez rvalue reference jest bardziej efektywne?

Na przykład: Beta_ab&& Beta::toAB() const { return move(Beta_ab(1, 1)); }

Dlaczego `std:: move 'nazywa się' STD:: move'?

Funkcja C++11 std::move(x) tak naprawdę niczego nie porusza. To tylko rzut do wartości R. Dlaczego to zrobiono? Czy to nie wprowadza w błąd?

Move capture w lambda

Jak przechwycić przez move (znany również jako rvalue reference) w C++11 lambda? Próbuję napisać coś takiego: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };

C++11 make pair z podanymi parametrami szablonu nie kompiluje

Po prostu bawiłem się z g++ 4.7 (jeden z późniejszych migawek) z włączoną-std=c++11. Próbowałem skompilować część mojej istni ... . g++ 4.4 kompiluje ten kod bez żadnych problemów. usunięcie -std = c++11 również kompiluje z kodem bez żadnych problemów.

Czy Mogę zazwyczaj / zawsze używać std:: forward zamiast std:: move?

Oglądałem wykład Scotta Meyersa na temat uniwersalnych odniesień z konferencji C++ and Beyond 2012 i wszystko ma sens do tej ... ::move: void doWork(Widget&& param) // move { // ops and exprs using std::forward<Widget>(param) }

Dlaczego niektórzy używają swap do zadań move?

Na przykład stdlibc++ ma następujące wartości: unique_lock& operator=(unique_lock&& __u) { if(_M_owns) ... padku swap wykonuje niepotrzebną pracę. Co przegapiłem? (unique_lock::swap po prostu wykonuje std:: swap na każdym członku)

Jak można wywołać STD:: forward na wszystkich argumentach w zmiennej funkcji?

Właśnie pisałem generic object factory i używałem meta-biblioteki preprocesora boost, aby stworzyć zmienny szablon(używając 2 ... ić, wymagałby ręcznego rozpakowywania z ...params i jeszcze nie jestem tam. Czy istnieje szybsza składnia, która by działała?

Jak właściwie wdrożyć zasadę pięciu?

UPDATE na dole P1: jak zaimplementowałbyś regułę pięciu dla klasy, która zarządza raczej dużymi zasobami, ale z których ... ze znane), Muszę stwierdzić, że to nie ma znaczenia i dlatego pozostaje do gustu dewelopera. W takim razie wybrałbym numer 2.

Czy jest jakiś przypadek, w którym użyteczny jest zwrot referencji RValue ( & & )?

Czy istnieje powód, dla którego funkcja powinna zwracać referencję RValue? Technika, sztuczka, idiom czy wzór? MyClass&& ... ym moglibyśmy na tym zyskać? Prawdopodobnie różni się to, gdy pisze się kod biblioteki lub API, w porównaniu do kodu klienta?

Najlepsza forma dla konstruktorów? Przekazać przez wartość lub odniesienie?

Zastanawiam się nad najlepszą formą dla moich konstruktorów. Oto przykładowy kod: class Y { ... } class X { public: X(co ... daniem kompilator potrafi najlepiej, jak i w moim same pytania. Proszę poprawić którekolwiek z nich, jeśli są nieprawidłowe.

Dlaczego zdefiniowany przez użytkownika konstruktor move-constructor wyłącza Ukryty Konstruktor kopiujący?

Gdy czytam boost/shared_ptr.hpp, widziałem ten kod: // generated copy constructor, destructor are fine... #if defined( BO ... in C++11, move disables the implicit copy"? Czy w C++11 zawsze piszemy kopię ctor samodzielnie, aby zapobiec takiej sytuacji?

Rozdzielczość przeciążenia między obiektem, rvalue reference, const reference

Biorąc pod uwagę wszystkie trzy funkcje, to wywołanie jest niejednoznaczne. int f( int ); int f( int && ); int f( in ... przeciążenie T const & i T && oraz jawne kopiowanie. Ale nawet nie jestem pewien, czy to jest ściśle standardowe.

Przeciążenie odniesień do wartości R i powielanie kodu

Rozważ co następuje: struct vec { int v[3]; vec() : v() {}; vec(int x, int y, int z) : v{x,y,z} {}; vec(co ... zasowych. Ale nie podoba mi się powielanie kodu, który wprowadza. Czy mogę osiągnąć to samo przy mniejszej liczbie powtórzeń?

Unikaj wykładniczego wzrostu referencji const i rvalue w konstruktorze

Koduję niektóre klasy template dla biblioteki uczenia maszynowego i mam do czynienia z tym problemem wiele razy. Używam główn ... amp;& optimizer) : _loss(std::move(loss)), _optimizer(std::move(optimizer)) {} Czy jest jakiś sposób, aby tego uniknąć?

Użycie rvalue reference members?

Zastanawiałem się, jakie zastosowanie ma członek odniesienia rvalue class A { // ... // Is this one useful? Foo &&f; }; Czy ma jakieś zalety lub wady w porównaniu z członkiem referencyjnym lvalue? Co to jest prime usecase of it?

Czy powinienem zwrócić referencję rvalue (przez std:: move ' ING)?

A C++Next blog post said that A compute(…) { A v; … return v; } Jeśli A ma Dostępny konstruktor copy lub mov ... nie, ale im więcej studiowałem, tym bardziej byłem zdezorientowany. Dlaczego powinniśmy zwracać wartość za pomocą std::move?

Jaki jest przypadek użycia przeciążenia funkcji Członkowskich na kwalifikatorach referencyjnych?

C++11 umożliwia przeciążanie funkcji składowych w oparciu o kwalifikatory referencyjne: class Foo { public: void f() & ... jalny przypadek użycia, w którym komitet zdecydował się go nie stosować. Więc, ponownie, jaki jest rozsądny przypadek użycia?