Słowo noexceptkluczowe można odpowiednio zastosować do wielu podpisów funkcji, ale nie jestem pewien, kiedy powinienem rozważyć jego użycie w praktyce. Na podstawie tego, co przeczytałem do tej pory, dodanie w ostatniej chwili noexceptwydaje się odnosić do niektórych ważnych problemów, które pojawiają się, gdy rzucają konstruktorzy ruchu. Nadal jednak nie jestem …
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)); }
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); …
MyClass a1 {a}; // clearer and less error-prone than the other three MyClass a2 = {a}; MyClass a3 = a; MyClass a4(a); Dlaczego? Nie mogłem znaleźć odpowiedzi na SO, więc pozwól mi odpowiedzieć na własne pytanie.
Jestem nowy, aby przenieść semantykę w C ++ 11 i nie wiem zbyt dobrze, jak obsługiwać unique_ptrparametry w konstruktorach lub funkcjach. Rozważ tę klasę, która sama się odwołuje: #include <memory> class Base { public: typedef unique_ptr<Base> UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void setNext(Base::UPtr n) { next = std::move(n); } …
Zwróć uwagę na aktualizacje na końcu tego postu. Aktualizacja: Utworzyłem projekt publiczny na GitHub dla tej biblioteki! Chciałbym mieć jeden szablon, który raz na zawsze zajmuje się ładnym drukowaniem wszystkich pojemników STL operator<<. W pseudokodzie szukam czegoś takiego: template<container C, class T, String delim = ", ", String open = …
Jestem dość zaznajomieni z C ++ 11-tych std::thread, std::asynca std::futureskładniki (np zobaczyć tę odpowiedź ), które są prosto do przodu. Nie mogę jednak do końca zrozumieć, co to std::promisejest, co robi i w jakich sytuacjach najlepiej go wykorzystać. Sam standardowy dokument nie zawiera wielu informacji poza streszczeniem klas, podobnie jak …
mam klasę template<size_t N, size_t M> class Matrix { // .... }; Chcę utworzyć, typedefktóry tworzy Vector(wektor kolumny), który jest równoważny Matrixz rozmiarami N i 1. Coś w tym rodzaju: typedef Matrix<N,1> Vector<N>; Co powoduje błąd kompilacji. Poniższe tworzy coś podobnego, ale nie dokładnie tego, czego chcę: template <size_t N> …
unique_ptr<T>nie zezwala na tworzenie kopii, zamiast tego obsługuje semantykę przenoszenia. Jednak mogę zwrócić a unique_ptr<T>z funkcji i przypisać zwróconą wartość do zmiennej. #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 main() …
Próbuję zaktualizować mój kompilator C ++ do C ++ 11. Trochę przeszukałem i doszedłem do wniosku, że muszę użyć flagi -std=c++0xlub -std=gnu++0x, ale niewiele wiem o flagach. Czy ktoś może mi pomóc? (Używam Ubuntu 12.04.) Oto błąd, który otrzymuję z kompilatora, gdy próbuję użyć biblioteki zawartej w C ++ 11 …
Kiedy próbuję uruchomić plik makefile wygenerowany przez CMake w celu skompilowania mojego programu, pojawia się błąd zakres oparty na pętlach nie jest obsługiwany w trybie C ++ 98. Próbowałem dodać add_definitions(-std=c++0x)do mojego CMakeLists.txt, ale to nie pomogło. Próbowałem też: if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-std=gnu++0x) endif() Kiedy to robię g++ --version, otrzymuję: g ++ …
На этот вопрос есть ответы на Stack Overflow на русском : Чем std :: unique_lock отличается от std :: lock_guard? Mam dwa przypadki użycia. A. Chcę zsynchronizować dostęp przez dwa wątki do kolejki. B. Chcę zsynchronizować dostęp do kolejki przez dwa wątki i użyć zmiennej warunkowej, ponieważ jeden z wątków …
Wydaje mi się, że posiadanie „funkcji, która zawsze zwraca 5”, łamie lub osłabia znaczenie „wywoływania funkcji”. Musi być jakiś powód lub potrzeba takiej możliwości, inaczej nie byłoby w C ++ 11. Dlaczego tam jest // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife = 42; // constexpr-function: constexpr int …
Typowym przykładem pętli opartych na zakresie C ++ 11 dla () jest zawsze coś takiego: std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 }; for ( auto xyz : numbers ) { std::cout << xyz << std::endl; } W którym xyzto przypadku jest int. Ale co się …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.