Pytania otagowane jako rvalue-reference

Odwołanie do wartości r to nowa funkcja języka w C ++ 11 reprezentująca odniesienie do wartości r. Wraz z zwijaniem referencji służą do implementacji i umożliwienia semantyki ruchu i doskonałego przekazywania.


6
Jakie są główne cele używania std :: forward i jakie problemy rozwiązuje?
W doskonałym przekazywaniu std::forwardsłuży do konwersji nazwanych odwołań do wartości t1i t2do nienazwanych odwołań do wartości. Jaki jest tego cel? Jak wpłynęłoby to na wywoływaną funkcję inner, gdybyśmy opuścili wartości t1& t2jako wartości? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

6
Wartości C ++ 11 i zamieszanie semantyki ruchu (instrukcja return)
Próbuję zrozumieć odwołania do wartości i przenieść semantykę C ++ 11. Jaka jest różnica między tymi przykładami i który z nich nie wykona kopii wektorowej? Pierwszy przykład std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Drugi przykład std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); …

6
Przenieś przechwytywanie w lambdzie
Jak przechwycić przez ruch (znany również jako odwołanie do wartości r) w lambdzie C ++ 11? Próbuję napisać coś takiego: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };



1
Jak można wywołać std :: forward dla wszystkich argumentów w funkcji wariadycznej?
Właśnie pisałem generyczną fabrykę obiektów i korzystałem z meta-biblioteki preprocesora boost, aby stworzyć szablon wariadyczny (używając 2010 i nie obsługuje ich). Moja funkcja korzysta z referencji rval i std::forwardaby wykonać doskonałe przekazywanie, i pomyślałem ... kiedy pojawi się C ++ 0X i mam standardowy kompilator, zrobiłbym to z prawdziwymi szablonami …



3
Wartości wartości zamknięcia lambda można przekazać jako parametry referencyjne wartości
Odkryłem, że lvaluezamknięcia lambda zawsze można przekazać jako rvalueparametry funkcji. Zobacz następującą prostą demonstrację. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function …

2
Dlaczego zmienna wyliczana jest tutaj wartością?
Przykład: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Podczas kompilacji pojawia się następujący błąd: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.