Questions marquées «rvalue-reference»


6
Quels sont les principaux objectifs de l'utilisation de std :: forward et quels problèmes cela résout-il?
Dans une transmission parfaite, std::forwardest utilisé pour convertir les références rvalue nommées t1et les t2références rvalue non nommées. Quel est le but de faire cela? Comment cela affecterait-il la fonction appelée innersi nous quittons t1& t2as lvalues? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); …

6
C ++ 11 rvalues ​​and move semantics confusion (instruction de retour)
J'essaie de comprendre les références rvalue et de déplacer la sémantique de C ++ 11. Quelle est la différence entre ces exemples et lequel d'entre eux ne fera pas de copie vectorielle? Premier exemple std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Deuxième exemple std::vector<int>&& …

6
Déplacer la capture en lambda
Comment capturer par déplacement (également appelé référence rvalue) dans un lambda C ++ 11? J'essaye d'écrire quelque chose comme ceci: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };



1
Comment appeler std :: forward sur tous les arguments d'une fonction variadique?
J'écrivais juste une fabrique d'objets génériques et j'utilisais la méta-bibliothèque du préprocesseur boost pour créer un modèle variadique (en utilisant 2010 et cela ne les prend pas en charge). Ma fonction utilise des références rval et std::forwardpour faire un transfert parfait et cela m'a fait réfléchir ... quand C ++ …


3
Les valeurs de fermeture lambda peuvent être passées en tant que paramètres de référence rvalue
J'ai trouvé que lvalueles fermetures lambda peuvent toujours être passées en tant que rvalueparamètres de fonction. Voir la démonstration simple suivante. #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 …

2
Pourquoi une variable enum est-elle une valeur r ici?
Exemple: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } J'obtiens l'erreur suivante lorsque je compile ceci: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned …
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.