Mam problemy ze zrozumieniem potrzeby std::result_ofw C ++ 0x. Jeśli dobrze zrozumiałem, result_ofsłuży do uzyskania wynikowego typu wywołania obiektu funkcji z określonymi typami parametrów. Na przykład: template <typename F, typename Arg> typename std::result_of<F(Arg)>::type invoke(F f, Arg a) { return f(a); } Naprawdę nie widzę różnicy w następującym kodzie: template <typename …
W kilku różnych miejscach przeczytałem, że przy użyciu nowych literałów ciągów C ++ 11 może być możliwe obliczenie skrótu ciągu w czasie kompilacji. Jednak nikt nie wydaje się być gotowy, aby wyjść i powiedzieć, że będzie to możliwe i jak to się stanie. czy to możliwe? Jak wyglądałby operator? Jestem …
Czy jest jakaś różnica między throw()i noexceptinnymi niż bycie sprawdzanymi odpowiednio w czasie wykonywania i kompilacji? Ten artykuł w Wikipedii o C ++ 11 sugeruje, że specyfikatory rzutów C ++ 03 są przestarzałe. Dlaczego tak, jest w noexceptstanie pokryć to wszystko w czasie kompilacji? [Uwaga: sprawdziłem to pytanie i ten …
Dlaczego jest taka potrzeba std::reference_wrapper? Gdzie powinien być używany? Czym różni się od prostego wskaźnika? Jak jego wydajność wypada w porównaniu z prostym wskaźnikiem?
Dzięki nowej pętli for opartej na zakresach możemy pisać kod podobny do for(auto x: Y) {} Która IMO jest ogromnym ulepszeniem (np.) for(std::vector<int>::iterator x=Y.begin(); x!=Y.end(); ++x) {} Czy można go użyć do zapętlenia dwóch równoczesnych pętli, jak zipfunkcja Pythona ? Dla osób niezaznajomionych z Pythonem kod: Y1 = [1,2,3] Y2 …
class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; Uważam, że powodem jest to, że tablice można zainicjować tylko za pomocą =składni, czyli: int arr[3] = {1,3,4}; pytania Jak mogę zrobić to, co chcę zrobić (to …
Według źródeł, które znalazłem, wyrażenie lambda jest zasadniczo implementowane przez kompilator, tworząc klasę z przeciążonym operatorem wywołania funkcji i zmiennymi, do których się odwołujemy jako składowymi. Sugeruje to, że rozmiar wyrażeń lambda jest różny, a przy wystarczającej liczbie zmiennych odwołań, rozmiar może być dowolnie duży . std::functionPowinien mieć stały rozmiar …
Zastanawiałem się, jak prawidłowo sprawdzić, czy std::functionjest pusty. Rozważmy ten przykład: class Test { std::function<void(int a)> eventFunc; void registerEvent(std::function<void(int a)> e) { eventFunc = e; } void doSomething() { ... eventFunc(42); } }; Ten kod kompiluje się dobrze w MSVC, ale jeśli zadzwonię doSomething()bez inicjalizacji eventFunckodu, oczywiście ulega awarii. To …
Widziałem gdzieś kod, w którym ktoś zdecydował się skopiować obiekt, a następnie przenieść go do członka danych klasy. Wprawiło mnie to w zakłopotanie, ponieważ myślałem, że celem przeniesienia jest uniknięcie kopiowania. Oto przykład: struct S { S(std::string str) : data(std::move(str)) {} }; Oto moje pytania: Dlaczego nie bierzemy odniesienia do …
W C ++ 11 istnieją różne szablony, takie jak ten: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } Jest kilka ciekawostek na ten temat: wyrażenie std::forward<Args>(args)...używa obu Argsi argstylko jednego ...tokenu. Ponadto std::forwardjest to niezmienna funkcja szablonu, która pobiera tylko jeden parametr …
Mam wektor IInventory * i przeglądam listę przy użyciu zakresu C ++ 11 dla, aby robić rzeczy z każdym z nich. Po zrobieniu kilku rzeczy z jednym, mogę chcieć usunąć go z listy i usunąć obiekt. Wiem, że mogę deletew każdej chwili wywołać wskaźnik, aby go wyczyścić, ale jaki jest …
(Uwaga: tuplei tiemożna je pobrać z Boost lub C ++ 11.) Podczas pisania małych struktur z tylko dwoma elementami, czasami wybieram std::pair, ponieważ wszystkie ważne rzeczy są już zrobione dla tego typu danych, jak operator<na przykład porządkowanie ścisłe-słabe . Wadą są jednak prawie bezużyteczne nazwy zmiennych. Nawet jeśli sam to …
Czy mogę przenosić elementy z a std::initializer_list<T>? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Ponieważ std::intializer_list<T>wymaga specjalnej uwagi kompilatora i nie ma semantyki wartości, takiej jak zwykłe kontenery biblioteki standardowej C ++, …
W poniższym kodzie pierwsze wywołanie foojest niejednoznaczne i dlatego nie można skompilować. Drugi, z dodanym +przed lambdą , jest wynikiem przeciążenia wskaźnika funkcji. #include <functional> void foo(std::function<void()> f) { f(); } void foo(void (*f)()) { f(); } int main () { foo( [](){} ); // ambiguous foo( +[](){} ); // …
Jaka jest różnica między std::system_clocki std::steady_clock? (Przykładowy przypadek ilustrujący różne wyniki / zachowania byłby świetny). Jeśli moim celem jest precyzyjny pomiar czasu wykonywania funkcji (np. Benchmarku), jaki byłby najlepszy wybór pomiędzy std::system_clock, std::steady_clocka std::high_resolution_clock?
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.