Pracuję z pamięcią niektórych lambd w C ++, ale trochę mnie dziwi ich rozmiar. Oto mój kod testowy: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout << &f << std::endl; std::cout << sizeof(f) << std::endl; } Możesz go …
Jestem prostym programistą. Zmienne składowe mojej klasy najczęściej składają się z typów POD i kontenerów STL. Z tego powodu rzadko muszę pisać operatory przypisania lub konstruktory kopiujące, ponieważ są one implementowane domyślnie. Dodajmy do tego, że jeśli używam std::movena obiektach, które nie są ruchome, używa operatora przypisania, co oznacza, że …
W C ++ możliwe jest użycie staticsłowa kluczowego w jednostce translacyjnej, aby wpłynąć na widoczność symbolu (deklaracja zmiennej lub funkcji). W n3092 to zostało wycofane: Załącznik D.2 [depr.static] Używanie słowa kluczowego static jest przestarzałe podczas deklarowania obiektów w zakresie przestrzeni nazw (patrz 3.3.6). W n3225 zostało to usunięte. Tylko artykuł …
Opis std::is_voidstwierdza, że: Zapewnia stałą składową, która jest równa true, jeśli T jest typem void, const void, volatile void lub const volatile void. Więc co mogłoby być const void, lub volatile void? Ta odpowiedź stwierdza, że const voidzwracany typ byłby nieprawidłowy (jednak kompiluje się na VC ++ 2015) const void …
Czy można w jakiś sposób zapisać pakiet parametrów do późniejszego wykorzystania? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } Później: …
Przed C ++ 11 mogliśmy wykonywać inicjalizację w klasie tylko na statycznych elementach stałych typu integralnego lub wyliczeniowego. Stroustrup omawia to w swoim C ++ FAQ , podając następujący przykład: class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not …
std::arrayznacznie przewyższa tablice C. A nawet jeśli chcę współdziałać ze starszym kodem, mogę po prostu użyć std::array::data(). Czy jest jakiś powód, dla którego chciałbym kiedykolwiek mieć tablicę ze starej szkoły?
Zastanawiam się, czy można napisać funkcję zwracającą funkcję lambda w C ++ 11. Oczywiście problemem jest zadeklarowanie takiej funkcji. Każda lambda ma typ, ale tego typu nie można wyrazić w C ++. Myślę, że to nie zadziała: auto retFun() -> decltype ([](int x) -> int) { return [](int x) { …
Próbowałem stworzyć wektor lambda, ale nie udało mi się: auto ignore = [&]() { return 10; }; //1 std::vector<decltype(ignore)> v; //2 v.push_back([&]() { return 100; }); //3 Do linii nr 2 kompiluje się dobrze . Ale wiersz # 3 podaje błąd kompilacji : błąd: brak funkcji dopasowującej dla wywołania 'std …
Jestem bardzo zdezorientowany co do inicjalizacji wartości i domyślnej oraz zerowej. a zwłaszcza wtedy, gdy zaczynają stosować różne standardy C ++ 03 i C ++ 11 (i C ++ 14 ). Cytuję i próbuję rozszerzyć naprawdę dobrą odpowiedź Value- / Default- / Zero- Init C ++ 98 i C ++ …
To jest trochę dwuczęściowe pytanie, dotyczące atomowości std::shared_ptr: 1. O ile wiem, std::shared_ptrjest to jedyny inteligentny wskaźnik w <memory>tym atomowym. Zastanawiam się, czy jest std::shared_ptrdostępna nieatomowa wersja programu (w środku nic nie widzę <memory>, więc jestem również otwarty na sugestie spoza standardu, jak te w Boost). Wiem, że boost::shared_ptrjest również …
Jeśli zadeklaruję obiekt zawinięty we współdzielony wskaźnik: std::shared_ptr<myClass> myClassObject(new myClass()); następnie chciałem przekazać to jako argument do metody: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr<myClass> arg1) { arg1->someField = 4; } Czy powyższe po prostu zwiększa liczbę referencji shared_pt i wszystko jest w porządku? A może pozostawia zwisający wskaźnik? Nadal masz …
W C ++ 11 możesz użyć zakresu opartego na zakresie for, który działa jak foreachinne języki. Działa nawet ze zwykłymi tablicami C: int numbers[] = { 1, 2, 3, 4, 5 }; for (int& n : numbers) { n *= 2; } Skąd wie, kiedy przestać? Czy działa tylko z …
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.