Das noexceptSchlüsselwort kann angemessen auf viele Funktionssignaturen angewendet werden, aber ich bin mir nicht sicher, wann ich es in der Praxis verwenden soll. Basierend auf dem, was ich bisher gelesen habe, noexceptscheint die Hinzufügung von Last-Minute einige wichtige Probleme zu lösen, die beim Werfen von Bewegungskonstruktoren auftreten. Ich kann jedoch …
std::forwardWird bei perfekter Weiterleitung verwendet, um die benannten rWertreferenzen t1und t2unbenannte rWertreferenzen zu konvertieren . Was ist der Zweck davon? Wie würde sich das auf die aufgerufene Funktion auswirken, innerwenn wir t1& t2als lWerte belassen? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }
Ich versuche, rWert-Referenzen zu verstehen und die Semantik von C ++ 11 zu verschieben. Was ist der Unterschied zwischen diesen Beispielen und welches von ihnen wird keine Vektorkopie machen? Erstes Beispiel std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Zweites Beispiel std::vector<int>&& return_vector(void) { std::vector<int> …
MyClass a1 {a}; // clearer and less error-prone than the other three MyClass a2 = {a}; MyClass a3 = a; MyClass a4(a); Warum? Ich konnte auf SO keine Antwort finden, also lass mich meine eigene Frage beantworten.
Ich bin neu in der Verschiebung der Semantik in C ++ 11 und weiß nicht genau, wie ich mit unique_ptrParametern in Konstruktoren oder Funktionen umgehen soll . Betrachten Sie diese Klasse, die sich selbst referenziert: #include <memory> class Base { public: typedef unique_ptr<Base> UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void …
Bitte beachten Sie die Updates am Ende dieses Beitrags. Update: Ich habe ein öffentliches Projekt auf GitHub für diese Bibliothek erstellt! Ich hätte gerne eine einzige Vorlage, die ein für alle Mal dafür sorgt, dass alle STL-Container über hübsch gedruckt werden operator<<. Im Pseudocode suche ich so etwas: template<container C, …
Ich bin ziemlich vertraut mit C ++ 11 ist std::thread, std::asyncund std::futureKomponenten (siehe zB diese Antwort ), die geradlinig sind. Ich kann jedoch nicht genau verstehen std::promise, was es ist, was es tut und in welchen Situationen es am besten verwendet wird. Das Standarddokument selbst enthält nicht viele Informationen, die …
ich habe ein klasse template<size_t N, size_t M> class Matrix { // .... }; Ich möchte ein machen typedef, das einen Vector(Spaltenvektor) erzeugt, der einem Matrixmit den Größen N und 1 entspricht. So etwas: typedef Matrix<N,1> Vector<N>; Was zu Kompilierungsfehlern führt. Das Folgende schafft etwas Ähnliches, aber nicht genau das, …
unique_ptr<T>erlaubt keine Kopierkonstruktion, sondern unterstützt die Verschiebungssemantik. Dennoch kann ich a zurückgebenunique_ptr<T> von einer Funktion zurückgeben und den zurückgegebenen Wert einer Variablen zuweisen. #include <iostream> #include <memory> using namespace std; unique_ptr<int> foo() { unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p ); // 2 } int …
Ich versuche, meinen C ++ - Compiler auf C ++ 11 zu aktualisieren. Ich habe ein bisschen gesucht und bin zu dem Schluss gekommen, dass ich die Flagge verwenden muss -std=c++0xoder -std=gnu++0x, aber ich weiß nicht viel über Flaggen. Kann mir jemand helfen? (Ich benutze Ubuntu 12.04.) Hier ist der …
Wenn ich versuche, ein von CMake generiertes Makefile auszuführen, um mein Programm zu kompilieren, wird der Fehler angezeigt Für Schleifen basierende Bereiche werden im C ++ 98-Modus nicht unterstützt. Ich habe versucht add_definitions(-std=c++0x), meine zu ergänzen CMakeLists.txt, aber es hat nicht geholfen. Ich habe es auch versucht: if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-std=gnu++0x) endif() …
Overа этот вопрос есть ответы на Stapelüberlauf на русском : Чем std :: unique_lock отличается от std :: lock_guard? Ich habe zwei Anwendungsfälle. A. Ich möchte den Zugriff von zwei Threads auf eine Warteschlange synchronisieren. B. Ich möchte den Zugriff von zwei Threads auf eine Warteschlange synchronisieren und eine Bedingungsvariable …
Es scheint mir, dass eine "Funktion, die immer 5 zurückgibt" die Bedeutung von "Aufrufen einer Funktion" bricht oder verwässert. Es muss einen Grund oder eine Notwendigkeit für diese Funktion geben, sonst wäre es nicht in C ++ 11. Warum ist es dort? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const …
Das gängige Beispiel für bereichsbasierte for () - Schleifen in C ++ 11 ist immer so einfach: std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 }; for ( auto xyz : numbers ) { std::cout << xyz << std::endl; } In welchem Fall xyzist ein int. Aber …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.