Pytania otagowane jako c++

C ++ jest językiem programowania ogólnego przeznaczenia. Został pierwotnie zaprojektowany jako rozszerzenie do C i ma podobną składnię, ale teraz jest to zupełnie inny język. Ten znacznik służy do pytań o kod (kompilowany) za pomocą kompilatora C ++. Użyj tagu specyficznego dla wersji w przypadku pytań związanych z określoną wersją standardową [C ++ 11], [C ++ 14], [C ++ 17] lub [C ++ 20] itp.

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 …

6
(Jak) mogę policzyć elementy w wyliczeniu?
To pytanie przyszło mi do głowy, gdy miałem coś takiego enum Folders {FA, FB, FC}; i chciałem utworzyć tablicę kontenerów dla każdego folderu: ContainerClass*m_containers[3]; .... m_containers[FA] = ...; // etc. (Korzystanie z map jest o wiele bardziej eleganckie w użyciu std::map<Folders, ContainerClass*> m_containers;:) Ale wracając do mojego pierwotnego pytania: co …
98 c++  count  enumeration 

7
Ostrzeżenie C ++: dzielenie podwójnego przez zero
Przypadek 1: #include <iostream> int main() { double d = 15.50; std::cout<<(d/0.0)<<std::endl; } Kompiluje się bez żadnych ostrzeżeń i wydruków inf. OK, C ++ radzi sobie z dzieleniem przez zero ( zobacz na żywo ). Ale, Przypadek 2: #include <iostream> int main() { double d = 15.50; std::cout<<(d/0)<<std::endl; } Kompilator …

9
jak przekonwertować z int na char *?
Jedyny sposób, jaki znam, to: #include <sstream> #include <string.h> using namespace std; int main() { int number=33; stringstream strs; strs << number; string temp_str = strs.str(); char* char_type = (char*) temp_str.c_str(); } Ale czy jest jakaś metoda wymagająca mniej pisania?

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 …

7
Co to jest uchwyt w C ++?
Powiedziano mi, że uchwyt jest swego rodzaju wskaźnikiem, ale nie, i że pozwala zachować odniesienie do obiektu, a nie do samego obiektu. Jakie jest bardziej szczegółowe wyjaśnienie?
98 c++  handle 


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 …

15
std :: string do float lub double
Próbuję przekonwertować std::stringna float/double. Próbowałem: std::string num = "0.6"; double temp = (double)atof(num.c_str()); Ale zawsze zwraca zero. Jakieś inne sposoby?
98 c++ 


4
wielokrotne definiowanie specjalizacji szablonów podczas korzystania z różnych obiektów
Kiedy używam specjalistycznego szablonu w różnych plikach obiektowych, podczas łączenia pojawia się błąd „wielokrotnej definicji”. Jedyne rozwiązanie, które znalazłem, polega na użyciu funkcji „inline”, ale wydaje się, że jest to jakieś obejście. Jak rozwiązać ten problem bez użycia słowa kluczowego „inline”? Jeśli to niemożliwe, dlaczego? Oto przykładowy kod: paulo@aeris:~/teste/cpp/redef$ cat …
98 c++  templates 




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 ++, …

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.