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 to jest poprawny C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC i MSVC uważają, że jest w porządku, Clang uważa, że tak nie jest: Compiler Explorer . Wszystkie kompilatory zgadzają się, że ten jest w porządku: Eksplorator kompilatorów . int main() …
Natknąłem się na takie zachowanie, std::gcdktóre okazało się nieoczekiwane: #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb = b; std::cout << a << …
Niedawno śledziłem dyskusję na temat Reddit, która doprowadziła do miłego porównania std::visitoptymalizacji między kompilatorami. Zauważyłem, co następuje: https://godbolt.org/z/D2Q5ED Zarówno GCC9, jak i Clang9 (myślę, że współużytkują ten sam stdlib) nie generują kodu do sprawdzania i zgłaszania wyjątku bezwartościowego, gdy wszystkie typy spełniają określone warunki. To prowadzi do znacznie lepszego codegen, …
Czy następujący program jest dobrze sformułowany? #include <vector> struct A { explicit A(int) {} }; int main() { std::vector<int> vi = {1, 2, 3, 4, 5}; std::vector<A> va(vi.begin(), vi.end()); } Zgodnie z C ++ 17 [sekwencja.reqmts] wymóg dotyczący X u(i, j); gdzie Xjest kontenerem sekwencji, jest: Tbędzie EmplaceConstructibledo Xz *i. …
Mam taki kod: #include <vector> #include <utility> int main() { std::vector<bool> vb{true, false}; std::swap(vb[0], vb[1]); } vector<bool>Pomijając argumenty na temat rozsądku , działało to dobrze: Clang dla komputerów Mac Visual Studio dla Windows GCC dla systemu Linux Następnie próbowałem zbudować go za pomocą Clanga w systemie Windows i otrzymałem następujący …
Jestem ciekawy, jak nullptrdziała. Normy N4659 i N4849 mówią: musi mieć typ std::nullptr_t; nie możesz wziąć jego adresu; można go bezpośrednio przekonwertować na wskaźnik, a wskaźnik na element członkowski; sizeof(std::nullptr_t) == sizeof(void*); jego konwersja na booljest false; jego wartość można przekonwertować na typ całkowy identycznie (void*)0, ale nie wstecz; Jest …
Kiedy chcemy używać static_assertw sposób if constexprmusimy warunek zależny od jakiegoś parametru szablonu. Co ciekawe, gcc i clang nie zgadzają się, gdy kod jest zawarty w lambda. Poniższy kod kompiluje się z gcc, ale clang wyzwala aser, nawet jeśli if constexprnie może to być prawda. #include <utility> template<typename T> constexpr …
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ę …
tl; dr: Myślę, że mój static_vector ma niezdefiniowane zachowanie, ale nie mogę go znaleźć. Ten problem dotyczy Microsoft Visual C ++ 17. Mam tę prostą i niedokończoną implementację static_vector, tj. Wektor o stałej pojemności, który można przypisać do stosu. Jest to program w C ++ 17, wykorzystujący std :: aligned_storage …
Oczywiście możemy połączyć dwie literały łańcuchowe w constexprfunkcji, ale co z konkatenacją literału łańcuchowego z łańcuchem zwróconym przez inną constexprfunkcję, jak w kodzie poniżej? template <class T> constexpr const char * get_arithmetic_size() { switch (sizeof(T)) { case 1: return "1"; case 2: return "2"; case 4: return "4"; case 8: …
Poszukuję sposobu na identyfikację pustych (niewychwyconych) lambd z innych lambd w funkcji szablonu. Obecnie używam C ++ 17, ale jestem również ciekawy odpowiedzi na C ++ 20. Mój kod wygląda następująco: template<typename T> auto func(T lambda) { // The aguments of the lambdas are unknown if constexpr (/* is captureless …
Następujące pytanie związane jest jednak odpowiedzi są stare, i komentarz od użytkownika Marc Glisse sugeruje nowych podejść od C ++ 17 do tego problemu, które nie mogą być należycie rozpatrzone. Próbuję uzyskać wyrównaną pamięć działającą poprawnie dla SIMD, wciąż mając dostęp do wszystkich danych. W przypadku Intela, jeśli utworzę wektor …
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.