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 istnieją pułapki związane z określonymi systemami operacyjnymi, o których powinienem wiedzieć? Istnieje wiele duplikatów ( 1 , 2 , 3 , 4 , 5 ) tego pytania, ale odpowiedź na nie została udzielona dziesiątki lat temu. Bardzo wysoko ocenione odpowiedzi na wiele z tych pytań są dziś błędne. Metody …
Staram się używać nowych funkcji c ++ 1z na czele rozwoju w gcc 6.0. Jeśli spróbuję tego małego przykładu: #include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; } Mam: / opt / linux-gnu_6-20151011 / …
O ile rozumiem, wprowadzono C ++ 14 std::make_unique, ponieważ w wyniku nieokreślenia kolejności oceny parametrów było to niebezpieczne: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (Wyjaśnienie: jeśli ocena najpierw przydzieli pamięć dla surowego wskaźnika, a następnie wywoła g()i wyjątek zostanie zgłoszony przed std::unique_ptrkonstrukcją, wtedy nastąpi wyciek pamięci). Dzwonienie std::make_uniquebyło sposobem na …
Jakie są konsekwencje gwarancji kolejności oceny głosowanych w C ++ 17 (P0145) w typowym kodzie C ++? Co to zmienia w następujących sytuacjach? i = 1; f(i++, i) i std::cout << f() << f() << f(); lub f(g(), h(), j());
Właśnie oglądałem Stephan T. Lavavej w CppCon 2018programie „Class Template Argument Deduction”, gdzie w pewnym momencie mimochodem mówi: W C ++ informacje prawie nigdy nie płyną wstecz ... Musiałem powiedzieć „prawie”, ponieważ jest jeden lub dwa przypadki, prawdopodobnie więcej, ale bardzo niewiele . Pomimo próby ustalenia, do których przypadków może …
Na spotkaniu Oulu ISO C ++ w 2016 r ., Komitet normalizacyjny przegłosował propozycję o nazwie Gwarantowane eliminowanie kopii poprzez uproszczone kategorie wartości w języku C ++ 17. Jak dokładnie działa gwarantowana eliminacja kopii? Czy obejmuje niektóre przypadki, w których usunięcie kopii było już dozwolone, czy też potrzebne są zmiany …
Mam projekt, który obecnie używa C ++ 11/14, ale wymaga czegoś takiego std::filesystem, co jest dostępne tylko w C ++ 17, stąd nie mam szansy, aby go obecnie używać. Widzę jednak, że jest dostępny w moim obecnym kompilatorze jako std::experimental::filesystem. Czy warto korzystać z funkcji eksperymentalnych, zakładając, że w przyszłości …
Standard C ++ 17 wprowadza „przewodniki po odliczaniu szablonów”. Rozumiem, że mają one coś wspólnego z nową dedukcją argumentów szablonu dla konstruktorów wprowadzoną w tej wersji standardu, ale nie widziałem jeszcze prostego wyjaśnienia w stylu FAQ, czym one są i do czego służą. Jakie są przewodniki po odliczaniu szablonów w …
Preludium: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1z wprowadzi składnię powiązań strukturalnych, która umożliwi pisanie zamiast int a, b, c; std::tie(a, b, c) = f(); coś jak auto [a, b, c] = f(); Jednak można std::tierównież określić std::ignoreignorowanie niektórych komponentów, np .: std::tie(a, b, std::ignore, …
W poniższym fragmencie kodu używam standardowego [[fallthrough]]atrybutu z C ++ 1z, aby udokumentować, że pożądane jest przejście: #include <iostream> int main() { switch (0) { case 0: std::cout << "a\n"; [[fallthrough]] case 1: std::cout << "b\n"; break; } } W GCC 7.1 kod kompiluje się bez błędu. Jednak kompilator nadal …
(W nawiązaniu do tego pytania i odpowiedzi .) Przed standardem C ++ 17 w [basic.compound] / 3 znajdowało się następujące zdanie : Jeśli obiekt typu T znajduje się pod adresem A, wskaźnik typu cv T *, którego wartością jest adres A, wskazuje na ten obiekt, niezależnie od tego, w jaki …
Czytałem, że w C ++ 17 możemy inicjalizować zmienne w iftakich instrukcjach if (int length = 2; length == 2) //execute something Zamiast int length = 2; if (length == 2) //do something Mimo że jest krótszy, wpływa na czytelność kodu (szczególnie dla osób, które nie znają tej nowej funkcji), …
Czy kompilator może to zoptymalizować (zgodnie ze standardem C ++ 17): int fn() { volatile int x = 0; return x; } do tego? int fn() { return 0; } Jeśli tak, dlaczego? Jeśli nie, dlaczego nie? Oto kilka przemyśleń na ten temat: obecne kompilatory kompilują się fn()jako zmienna lokalna …
Próbuję dowiedzieć się, jak uzyskać w sobie adres funkcji lambda. Oto przykładowy kod: []() { std::cout << "Address of this lambda function is => " << ???? }(); Wiem, że potrafię uchwycić lambda w zmiennej i wydrukować adres, ale chcę to zrobić w miejscu, gdy wykonuje się ta anonimowa funkcja. …
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ć …
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.