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).

5
przy użyciu szablonu zewnętrznego (C ++ 11)
Rysunek 1: szablony funkcji TemplHeader.h template<typename T> void f(); TemplCpp.cpp template<typename T> void f(){ //... } //explicit instantation template void f<T>(); Main.cpp #include "TemplHeader.h" extern template void f<T>(); //is this correct? int main() { f<char>(); return 0; } Czy jest to właściwy sposób użycia extern template, czy też używam tego …
116 c++  templates  c++11  extern 


4
Unikasz instrukcji if wewnątrz pętli for?
Mam klasę o nazwie, Writerktóra ma taką funkcję writeVector: void Drawer::writeVector(vector<T> vec, bool index=true) { for (unsigned int i = 0; i < vec.size(); i++) { if (index) { cout << i << "\t"; } cout << vec[i] << "\n"; } } Staram się nie mieć duplikatu kodu, jednocześnie martwiąc …


3
Jaka jest zaleta używania odwołań do przekazywania w pętlach opartych na zakresach?
const auto&wystarczy, jeśli chcę wykonywać operacje tylko do odczytu. Jednak wpadłem na for (auto&& e : v) // v is non-const ostatnio kilka razy. To sprawia, że ​​zastanawiam się: Czy to możliwe, że w niektórych niejasnych przypadkach narożnych korzystanie z odniesień do przekazywania przynosi pewne korzyści w zakresie wydajności w …

1
Jak można wywołać std :: forward dla wszystkich argumentów w funkcji wariadycznej?
Właśnie pisałem generyczną fabrykę obiektów i korzystałem z meta-biblioteki preprocesora boost, aby stworzyć szablon wariadyczny (używając 2010 i nie obsługuje ich). Moja funkcja korzysta z referencji rval i std::forwardaby wykonać doskonałe przekazywanie, i pomyślałem ... kiedy pojawi się C ++ 0X i mam standardowy kompilator, zrobiłbym to z prawdziwymi szablonami …

2
Czy komitet normalizacyjny C ++ ma zamiar, aby w C ++ 11 unordered_map niszczył to, co wstawia?
Właśnie straciłem trzy dni mojego życia, szukając bardzo dziwnego błędu, w którym unordered_map :: insert () niszczy wstawioną zmienną. To wysoce nieoczywiste zachowanie występuje tylko w najnowszych kompilatorach: stwierdziłem, że Clang 3.2-3.4 i GCC 4.8 są jedynymi kompilatorami, które zademonstrowały tę „funkcję”. Oto trochę zredukowany kod z mojej głównej bazy …
114 c++  gcc  c++11  clang  standards 

9
Jaki jest najlepszy sposób na jednoczesne iterowanie w dwóch lub więcej kontenerach
C ++ 11 zapewnia wiele sposobów iteracji po kontenerach. Na przykład: Pętla oparta na zakresie for(auto c : container) fun(c) std :: for_each for_each(container.begin(),container.end(),fun) Jednak jaki jest zalecany sposób iteracji na dwóch (lub więcej) kontenerach tego samego rozmiaru, aby osiągnąć coś takiego: for(unsigned i = 0; i < containerA.size(); ++i) …


20
Jak możesz iterować po elementach std :: tuple?
Jak mogę iterować po krotce (używając C ++ 11)? Wypróbowałem następujące: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); ale to nie działa: Błąd 1: przepraszam, nie zaimplementowano: nie można rozwinąć „Listener ...” do listy argumentów o stałej długości. Błąd 2: nie mogę pojawić się w stałym wyrażeniu. Jak więc poprawnie wykonać iterację …

8
Jak zwięźle, przenośnie i dokładnie obsiać mt19937 PRNG?
Wydaje mi się, że widzę wiele odpowiedzi, w których ktoś sugeruje użycie <random>do generowania liczb losowych, zwykle wraz z takim kodem: std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, 5); dis(gen); Zwykle zastępuje to jakąś „przeklętą obrzydliwość”, taką jak: srand(time(NULL)); rand()%6; Możemy krytykować stary sposób, argumentując, że time(NULL)zapewnia niską entropię, time(NULL)jest przewidywalny, …
113 c++  c++11  random 

6
Dlaczego możemy użyć „std :: move” na obiekcie „const”?
W C ++ 11 możemy napisać taki kod: struct Cat { Cat(){} }; const Cat cat; std::move(cat); //this is valid in C++11 kiedy dzwonię std::move, to znaczy, że chcę przesunąć obiekt, czyli zmienię obiekt. Przesuwanie constobiektu jest nierozsądne, więc dlaczego std::movenie ogranicza tego zachowania? To będzie pułapka w przyszłości, prawda? …
113 c++  c++11 

4
Czy cout jest zsynchronizowany / bezpieczny dla wątków?
Generalnie zakładam, że strumienie nie są zsynchronizowane, to do użytkownika należy odpowiednie zablokowanie. Czy jednak takie rzeczy jak coutbiblioteka standardowa są traktowane w specjalny sposób? Oznacza to, że jeśli wiele wątków pisze do, coutczy mogą uszkodzić coutobiekt? Rozumiem, że nawet po zsynchronizowaniu nadal otrzymujesz wyjście z przeplotem losowo, ale czy …
112 c++  gcc  c++11 

4
Czy klasę wyliczenia można przekonwertować na typ bazowy?
Czy istnieje sposób na przekonwertowanie enum classpola na typ bazowy? Myślałem, że to będzie automatyczne, ale najwyraźniej nie. enum class my_fields : unsigned { field = 1 }; unsigned a = my_fields::field; To przypisanie jest odrzucane przez GCC. error: cannot convert 'my_fields' to 'unsigned int' in assignment.
112 c++  c++11 

13
Jak mogę uniknąć pętli „for” zawierających warunek „if” w C ++?
W przypadku prawie całego kodu, który piszę, często mam do czynienia z problemami z redukcją zestawów na kolekcjach, które ostatecznie kończą się naiwnymi warunkami „jeśli” w nich. Oto prosty przykład: for(int i=0; i<myCollection.size(); i++) { if (myCollection[i] == SOMETHING) { DoStuff(); } } Dzięki językom funkcjonalnym mogę rozwiązać problem, redukując …
111 c++  c++11  c++14 

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.