Pytania otagowane jako c++11

Użyj tego znacznika do kodu, który musi zostać skompilowany jako C ++ 11 (nie używając żadnych funkcji wprowadzonych w C ++ 14 lub nowszej).

2
Różnica między std :: result_of i decltype
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 …
100 c++  c++11  decltype  result-of 

11
Haszowanie ciągów czasu kompilacji
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 …



13
Funkcja sekwencji-zip dla C ++ 11?
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 …
100 c++  c++11  sequences 


4
Jak zaimplementowano std :: function?
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 …
99 c++  c++11  lambda 

3
Jak poprawnie sprawdzić, czy funkcja std :: jest pusta w C ++ 11?
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 …

4
Dlaczego kopiujemy, a potem przenosimy?
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 …

2
Jakie są zasady dotyczące tokena „…” w kontekście różnych szablonów?
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 …


4
Wdrożenie operatorów porównania za pomocą „krotki” i „remisu”, dobry pomysł?
(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 …

8
initializer_list i przenoszenie semantyki
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 ++, …

1
Rozwiązywanie niejednoznacznego przeciążenia wskaźnika funkcji i std :: function dla lambda przy użyciu +
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( +[](){} ); // …

4
Różnica między std :: system_clock a std :: steady_clock?
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?
97 c++  c++11  timer  chrono 

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.