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.

3
Operator równości nie został zdefiniowany dla niestandardowej implementacji operatora statku kosmicznego w C ++ 20
Napotykam dziwne zachowanie z nowym operatorem statku kosmicznego <=>w C ++ 20. Korzystam z kompilatora Visual Studio 2019 z /std:c++latest. Ten kod kompiluje się zgodnie z oczekiwaniami: #include <compare> struct X { int Dummy = 0; auto operator<=>(const X&) const = default; // Default implementation }; int main() { X …


5
Ciąg przyjazny dla szablonu na numeryczny w C ++
W standardowej bibliotece C ++ są funkcje do konwersji z ciągów znaków na typy numeryczne: stoi stol stoll stoul stoull stof stod stold ale uważam, że nużące jest używanie ich w kodzie szablonu. Dlaczego nie ma funkcji szablonów, takich jak: template<typename T> T sto(...) konwertować ciągi znaków na typy numeryczne? …

2
Dlaczego „używa Systemu”; nie uważane za złą praktykę?
Mam doświadczenie w języku C ++ i w pełni rozumiem i zgadzam się z odpowiedziami na to pytanie: Dlaczego „używanie przestrzeni nazw std;” uważane za złą praktykę? Jestem więc zaskoczony, że mając trochę doświadczenia z C #, widzę tam dokładnie coś przeciwnego: using Some.Namespace;jest dosłownie wszędzie używany. Za każdym razem, …

2
Algorytm znajdowania rozwiązania dla A xor X = B + X
Biorąc pod uwagę liczby całkowite A i B, znajdź liczbę całkowitą X, aby: A, B <2 * 1e18 Xor X = B + X Bardzo wątpię, czy możliwe jest rozwiązanie tego równania za pomocą matematyki. Jest to problem z kodowaniem, na który natknąłem się 3 lata temu i nawet teraz …
46 c++  xor 

3
std :: vector (ab) używa automatycznego przechowywania
Rozważ następujący fragment kodu: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } Oczywiście ulegnie awarii na większości platform, ponieważ domyślny rozmiar stosu jest zwykle mniejszy niż 20 MB. Teraz rozważ następujący kod: #include <array> #include <vector> int main() { using huge_type = std::array<char, 20*1024*1024>; std::vector<huge_type> …

3
Jak uzyskać głębokość wielowymiarowego std :: vector w czasie kompilacji?
Mam funkcję, która przyjmuje wielowymiarowość std::vectori wymaga podania głębokości (lub liczby wymiarów) jako parametru szablonu. Zamiast na stałe wpisywać tę wartość, chciałbym napisać constexprfunkcję, która pobierze std::vectori zwróci głębokość jako unsigned integerwartość. Na przykład: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } }, { { 4, …

2
Dlaczego operator! = Usunięto w C ++ 20 dla wielu standardowych typów bibliotek?
Zgodnie z cppreference , std::type_info::operator!=zostaje usunięty z C ++ 20, jednak std::type_info::operator==najwyraźniej pozostaje. Jakie jest uzasadnienie? Mógłbym się zgodzić na to, że porównywanie nierówności byłoby pozbawione sensu, ale wtedy porównywanie dla równości byłoby równie samo pozbawione znaczenia, prawda? Podobnie, operator!=wiele innych standardowych typów bibliotek, w tym kontenery takie jak std::unordered_map::operator!=i …

5
Czy można zapobiec pominięciu elementów inicjujących agregację?
Mam strukturę z wieloma członkami tego samego typu, jak ten struct VariablePointers { VariablePtr active; VariablePtr wasactive; VariablePtr filename; }; Problem polega na tym, że jeśli zapomnę zainicjować jednego z elementów struktury (np. wasactive), To tak: VariablePointers{activePtr, filename} Kompilator nie będzie na to narzekał, ale będę miał częściowo zainicjowany obiekt. …


7
Idiomatyczny sposób rozróżnienia dwóch konstruktorów zero-arg
Mam taką klasę: struct event_counts { uint64_t counts[MAX_COUNTERS]; event_counts() : counts{} {} // more stuff }; Zwykle chcę domyślnie (zero) zainicjować countstablicę, jak pokazano. Jednak w wybranych lokalizacjach zidentyfikowanych przez profilowanie chciałbym powstrzymać inicjalizację tablicy, ponieważ wiem, że tablica wkrótce zostanie zastąpiona, ale kompilator nie jest wystarczająco inteligentny, aby to …

2
Podejścia do działania SFINAE w C ++
Używam mocno funkcji SFINAE w projekcie i nie jestem pewien, czy istnieją jakieś różnice między następującymi dwoma podejściami (innymi niż styl): #include <cstdlib> #include <type_traits> #include <iostream> template <class T, class = std::enable_if_t<std::is_same_v<T, int>>> void foo() { std::cout << "method 1" << std::endl; } template <class T, std::enable_if_t<std::is_same_v<T, double>>* = …
40 c++  sfinae 


2
Dlaczego remove_reference nie działa na funkcje?
Wpadłem na coś dziwnego podczas wykonywania metaprogramowania szablonu innego dnia. Zasadniczo sprowadza się do tego twierdzenia, że ​​nie jest (jak się spodziewałbym) przemijanie. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Na początku myślałem, że popełniam błąd składniowy, definiując odwołanie do funkcji, ale to twierdzenie mija, pokazując, że tak nie jest. static_assert(std::is_same_v<void()&, void()&>); Próbowałem też zaimplementować …
38 c++  templates  types  c++17 

4
Programowanie meta szablonów
Czy ktoś może mi wyjaśnić, dlaczego pierwszy sposób metaprogramowania szablonów prowadzi do nieskończonej pętli, ale drugi działa poprawnie. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static const int val …

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.