C ++ 17 to nazwa standardu C ++ zatwierdzonego w 2017 roku. Opiera się on na poprzednim standardzie C ++ 14, ulepszając podstawowy język i standardową bibliotekę oraz dodając kilka nowych funkcji językowych.
Czy istnieje sposób sprawdzenia, czy dwie funkcje mają taki sam podpis? Na przykład: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); W tym przykładzie, funAi funBjest jedynym połączeniem funkcji, które powinny powrócić true.
Jak w C ++ 17 zadeklarować i zainicjować wektor par (lub krotek) za pomocą opcjonalnego elementu? std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true}, {2, false}, {3, nullptr}}; Mam parę, w której drugi element może być zerowy / opcjonalny.
Ten kod nie kompiluje się w Clang (6,7,8,9, trunk), ale dobrze się kompiluje w GCC (7.1, 8.1, 9.1): template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } …
Rozważ następujący kod . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Tutaj drugi operator konwersji jest wybierany przez rozdzielczość przeciążenia. Dlaczego? O ile rozumiem, dwa operatory są wydedukowane odpowiednio operator int …
Wyjaśniające. Zasadniczo powiedz, że mam takie listy typów: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Mogą to być różne listy typów. Jak uzyskać listę typową produktu kartezjańskiego? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, short> >; …
Powiedzmy, że mam shared_ptrniestandardowy alokator i niestandardowy usuwacz. Nie mogę znaleźć w standardzie niczego, co mówi o tym, gdzie powinien być przechowywany usuwacz: nie mówi, że niestandardowy alokator zostanie użyty do pamięci usuwacza, i nie mówi, że nie będzie. Czy jest to nieokreślone, czy coś mi brakuje?
#include <optional> bool f() { std::optional<int> opt; return opt; } Nie kompiluje: 'return': cannot convert from 'std::optional<int>' to 'bool' Odniesienie do konsultacji Chciałbym znaleźć wyjaśnienie, ale przeczytałem je tak, jak powinno być dobrze. Konwersje niejawne są wykonywane za każdym razem, gdy wyrażenie pewnego typu T1 jest używane w kontekście, który …
Jak według danego typu wariantu using V = std::variant<bool, char, std::string, int, float, double, std::vector<int>>; zadeklaruj dwa typy wariantów using V1 = std::variant<bool, char, int, float, double>; using V2 = std::variant<std::string, std::vector<int>>; gdzie V1obejmuje wszystkie typy arytmetyczne z Vi V2obejmuje wszystkie typy arytmetyczne z V? V może być parametrem klasy …
Mam przeciążoną funkcję szablonu: template<typename T1, typename T2> auto overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? a : b; } template<typename RT, typename T1, typename T2> RT overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? …
Cppreference ma ten przykładowy kod dla std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Ale mówi również: std::transformnie gwarantuje zastosowania unary_oplub binary_op. Aby zastosować funkcję do sekwencji w kolejności lub zastosować funkcję, która modyfikuje elementy sekwencji, użyj std::for_each. Ma to prawdopodobnie umożliwić równoległe …
Pracuję w projekcie z C ++ 11 i próbowałem śledzić kod #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } Otrzymuję błąd kompilatora error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = 1; ^ Ten sam wynik jest …
Czy istnieje sposób sprawdzenia w C ++ 11, czy wyliczenie jest ciągłe ? W pełni uzasadnione jest podawanie wartości wyliczeniowych, które nie są. Czy w C ++ 14, C ++ 17 jest jakaś cecha typu, a może C ++ 20, aby sprawdzić, czy wyliczanie jest ciągłe? Należy tego użyć w …
Nasz zespół pracuje z ponad 10-letnią bazą kodu C ++, a ostatnio przeszedł na kompilator C ++ 17. Szukamy więc sposobów modernizacji naszego kodu. Podczas konferencji na YouTube usłyszałem sugestię zastąpienia const char*globalnych ciągów constexpr string_view. Ponieważ const char*w naszym kodzie mamy całkiem sporo takich globalnych stałych ciągów, chcę zapytać, …
Grałem około z autow std::pair. W poniższym kodzie funkcja fpowinna zwracać std::pairtypy zależne od parametru szablonu. Przykład roboczy: PRZYKŁAD 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // pair of …
Kompiluję ten program przez g ++ i clang ++. Jest różnica: g ++ drukuje 1, ale clang ++ drukuje 2. Wygląda na to, że g ++: zmienna zewnętrzna jest zdefiniowana w najkrótszym zakresie. clang ++: zmienna zewnętrzna jest zdefiniowana w najkrótszym globalnym zakresie. Czy specyfikacja C ++ ma jakieś specyfikacje …
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.