Mam szablon funkcji, który pobiera wiele różnych typów podczas wprowadzania. Spośród tych typów tylko jeden z nich ma getInt()funkcję. Dlatego chcę, aby kod uruchamiał funkcję tylko dla tego typu. Proszę zaproponować rozwiązanie. Dzięki #include <type_traits> #include <typeinfo> class X { public: int getInt(){ return 9; } }; class Y{ }; …
W dokumentacji std::memory_orderna cppreference.com jest przykład swobodnego zamawiania: Zrelaksowane zamawianie Oznaczone operacje atomowe memory_order_relaxednie są operacjami synchronizacji; nie narzucają kolejności między dostępami do pamięci jednocześnie. Gwarantują one tylko atomowość i spójność kolejności modyfikacji. Na przykład, gdy xiy początkowo wynoszą zero, // Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); …
Poniższy kod kompiluje się z gcc i clang (i wieloma innymi kompilatorami C ++ 11) #include <stdint.h> typedef int datatype; template <typename T> struct to_datatype {}; template <> struct to_datatype<int16_t> { static constexpr datatype value = 1; }; template <typename T> class data { public: data(datatype dt = to_datatype<T>::value) {} …
Próbuję zrozumieć typy wyrażeń C ++, a im więcej czytam, tym bardziej byłem zdezorientowany, ponieważ uważam, że szkic C ++ jest bardzo trudny do strawienia, dlatego wolę inne zasoby, ale albo one są sobie sprzeczne, albo nie biorą pod uwagę, że brzmienie i definicja między wersjami C ++ mocno się …
Przykład: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Podczas kompilacji pojawia się następujący błąd: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' …
Natknąłem się na następujące stwierdzenia: resize(n)- Zmienia rozmiar kontenera, aby zawierał elementy „n”. shrink_to_fit()- Zmniejsza pojemność pojemnika w celu dopasowania do jego rozmiaru i niszczy wszystkie elementy poza pojemnością. Czy istnieje jakaś znacząca różnica między tymi funkcjami? wchodzą w wektory w c ++
Wiem o funkcjach generowanych przez kompilator, regule trzech i regule pięciu. W scenariuszach rzeczywistych może nie być trywialne ustalenie, które z funkcji generowanych przez kompilator (konstruktory, operatory przypisania, destruktor) faktycznie zostały utworzone przez kompilator. Czy jest jakiś sposób, aby wyświetlić listę funkcji generowanych przez kompilator dla określonej klasy? Interesuje mnie …
Masz pojęcie, dlaczego poniższy fragment kodu nie jest kompilowany? Narzeka z błędem „error: operand to?: Have different types” auto lambda1 = [&](T& arg) { ... }; auto lambda2 = [&](T& arg) { ... }; auto lambda = condition ? lambda1 : lambda2;
Przeciążona funkcja powinna przyjmować oba funktory, biorąc pod uwagę, że typ lambda jest rozstrzygalny (można ją wyrzucić std::function(proszę poprawić mnie, jeśli się mylę). Pytanie brzmi: Dlaczego poniżej jest błąd kompilacji, mimo że jawnie jest to typ lambda zdefiniowany? ( [&]() -> Type {}) Pamiętaj, że dla mojego obecnego rozwiązania potrzebuję …
Czy następujący (wymyślony przykład) jest w porządku, czy jest to niezdefiniowane zachowanie: // undefined behavior? const auto& c = SomeClass{}; // use c in code later const auto& v = c.GetSomeVariable();
Mam kod, który wyszukuje i drukuje dopasowania wzorca przechodzące przez kontener ciągów. Drukowanie odbywa się w funkcji foo, która jest szablonowana Kod #include <iostream> #include <algorithm> #include <iterator> #include <vector> #include <string> #include <tuple> #include <utility> template<typename Iterator, template<typename> class Container> void foo(Iterator first, Container<std::pair<Iterator, Iterator>> const &findings) { for …
Rozważ ten program: #include <cstdint> using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } Nie udało się skompilować z msvc v19.24: <source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t' <source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to …
Wiem, że std::arrayjest całkowicie przydzielony na stosie, ale to pytanie jest uzasadnione względami bezpieczeństwa, które wymagają dwóch rzeczy: Dane std::arrayzostaną zerowane lub losowo po zniszczeniu Dane std::arrayzostaną zablokowane , tak aby nigdy nie trafiały na dysk ani w przypadku awarii, ani w pamięci wymiany Zwykle std::vectorrozwiązaniem jest utworzenie niestandardowego programu …
Jest std::array<T, N>::size(), ale jest niestatyczna, więc wymaga wystąpienia std::array. Czy istnieje sposób, aby uzyskać wartość powraca (który jest Nz std::array<T, N>) bez konieczności konstruowania instancji tablicy? Do normalnej tablicy mógłbym użyćsizeof , ale nie widzę żadnej gwarancji, że sizeof(std::array<T, N>) == N * sizeof(T)to prawda.
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.